zoukankan      html  css  js  c++  java
  • 【图解Http 学习摘要】五、HTTPS 中的加密、证书介绍,不一直使用 HTTPS 的原因

    在上一文中,讲述了 HTTP 的种种安全性问题,要解决的话,就要用 HTTPS。

    HTTP 加上加密处理认证以及完整性保护后即是 HTTPS。

    经常会在 Web 的登录页面和购物结算界面等使用 HTTPS 通信,比如打开淘宝的登录页。

    • 使用 HTTPS 通信时,不再用 http://,而是改用 https://
    • 当浏览器访问 HTTPS 通信有效的 Web 网站时,浏览器的地址栏内会出现一个带锁的标记。

    一、HTTPS 是身披 SSL 外壳的 HTTP

    首先要明确:HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL(Secure Socket Layer)和 TLS(Transport Layer Security)协议代替而已。

    • 通常,HTTP 直接和 TCP 通信。
    • 当使用 SSL时,则演变成先和 SSL 通信,再由 SSL 和 TCP 通信了。

    SSL 是独立于 HTTP 的协议。

    所以,不光是 HTTP 协议,其他运行在应用层的协议,比如 SMTP 和 Telnet 等,均可配合 SSL 协议使用。可以说 SSL 是 当今世界上应用最为广泛网络安全技术。

    二、相互交换密钥的公开密钥加密技术

    SSL 采用一种叫做公开密钥加密(Public-key cryptography)的加密处理方式。

    不过在继续了解之前,先看下这2种:

    • 共享密钥加密
    • 公开密钥加密

    1. 共享密钥加密

    加密和解密同用一个密钥(也叫对称密钥加密),加密时必须将密钥也发给对方,那么如何安全地把密钥交给对方是个问题。

    • 如果在互联网上转发密钥时,通信被监听,那么密钥就可会落入攻击者之手,同时也就失去了加密的意义。
    • 此外,接收方还得设法安全地保管接收到的密钥。

    2. 公开密钥加密

    针对上面的问题,于是有了公开密钥加密方式。解决思路也很简单:既然担心密钥在发送过程中被盗走,那么我不发送密钥不就解决了?

    于是,公开密钥加密使用一对非对称的密钥,分别是:

    • 私有密钥 (private key):私有密钥不能让其他任何人知道。
    • 公开密钥(public key):公开密钥则可以随意发布,任何人都可以获得。

    交互过程是这样的(发送密文方A,接收方B):

    1. A 使用 B 的公开密钥进行加密。
    2. A 发送加密后的信息给 B。
    3. B 收到加密的信息后,用自己的私有钥匙进行解密。

    利用这种方式,不需要发送用来解密的私有密钥,也就不必担心密钥被攻击者窃听而盗走。

    另外,就算你知道了公开密钥密文,想要恢复到信息原文是异常困难的。

    因为解密过程就是在对离散对数进行求值,这并非轻而易举就能办到。

    再退一步讲,如果能对一个非常大的整数做到快速地因式分解,那么密码破解还是存在希望的。但就目前的技术来看是不太现实的。

    3. HTTPS 采用混合加密机制

    HTTPS 采用以上2种加密方式的混合加密机制

    因为,公开密钥加密处理起来比共享密钥加密更加复杂,因此在通信中使用时,效率就更低

    所以应充分利用两者各自的优势:

    • 交换密钥环节使用公开密钥加密方式。
    • 之后的建立通信交换报文阶段则使用共享密钥加密方式。

    三、证明公开密钥正确性的证书

    环环相扣,在上述的公开密钥加密方式还是存在一些问题:

    • 无法证明公开密钥本身就是货真价实的公开密钥。

    比如,A 整准备和 B 服务器建立公开密钥加密方式下的通信,A 也确实收到了公开密钥。但是 A 不知道这个公开密钥是不是真的来自于 B,或许在传输途中,真的公开密钥已经被攻击者替换掉了。

    于是,为了解决这个问题,需要使用由数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书

    1. 什么是 数字证书认证机构?

    是处于客户端与服务器双方都可信赖的第三方机构,比如威瑞信(VeriSign)。

    业务流程

    1. 首先,服务器把自己的公开密钥登录至机构。
    2. 机构用自己的私有密钥像服务器的公开密钥数字签名,并颁发公钥证书(服务器公开密钥+机构的数字签名)。
    3. 服务器将证书发送个客户端。
    4. 接收到证书的客户端,使用机构的公开密钥对证书上的数字签名进行验证。

    一旦验证通过,就说明:

    • 认证服务器的公开密钥的是真实有效的数字证书认证机构。
    • 服务器的公开密钥是值得信赖的。

    OK,看起来很不错。但是在服务器转交认证的公开密钥给客户端的时候,如何安全转交也是一件困难的事情。

    既然转交过程有风险,那么尽量不转交。因此,多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开密钥

    万事大吉后,客户端就可以使用公开密钥对报文加密后发送了,服务器收到后再用私有密钥对报文解密即可。

    2. 证书的类型

    • 可证明组织真实性的 EV SSL 证书
      证书的一个作用是用来证明作为通信一方的服务器是否规范,另外一个作用是可确认对方服务器背后运营的企业是否真实存在,EV SSL证书就有此特性。

    • 用以确认客户端的客户端证书
      HTTPS 中还可以使用客户端证书。以客户端证书进行客户端认证,证明服务器正在通信的对方始终是预料之内的客户端。这个在一些网上银行会有,比如登录网银时不仅 要求用户确认输入 ID 和密码,还会要求用户的客户端证书,就是用来确认用户是否从特定的终端访问网银。

    • 由自认证机构颁发的证书称为自签名证书
      通过使用 OpenSSL这套开源程序,每个人都可以构建一套属于自己的认证机构,从而自己给自己颁发服务器证书。但是这种证书浏览器很可能不认,访问时会显示“无法确认连接安全性”或“该网站的安全证书存在问题”等警告消息。

    按理说,认证机构信誉第一,信用要绝对可靠。但是也存在遭到黑客入侵的风险。2011 年 7 月,荷兰的一家名叫 DigiNotar 的认证机构曾遭黑客不法入侵,颁布了 google.com 和 twitter.com 等网站的伪造证书事件。这一事件从根本上撼动了 SSL的可信度。

    四、使用 SSL 影响了速度

    SSL的慢分两种:通信慢、处理速度慢。

    通信慢
    和使用HTTP相比,HTTPS 除去和 TCP 连接、发送 HTTP 请求 • 响应以外,还必须进行 SSL通信,所以整体上处理通信量会增加。

    相比之下,HTTPS 比 HTTP 要慢 2 到 100 倍

    处理速度慢
    由于 HTTPS 还需要做服务器、客户端双方加密、界面处理,因此会消耗更多的CPU和内存等硬件资源。

    对此,没有根本性解决方案。不过有一种 SSL加速器(专用服务器)硬件可以来改善该问题。该硬件为 SSL通信专用硬件,相对软件来讲,能够提高数倍 SSL 的计算速 度。仅在 SSL 处理时发挥 SSL 加速器的功效,以分担负载。

    五、为什么不一直使用 HTTPS

    灵魂拷问:既然 HTTPS 那么安全可靠,那为何所有的 Web 网站不一直使用 HTTPS ?

    原因 1
    与纯文本通信相比,加密通信会消耗更多的 CPU 及内存资源。如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定也会随之减少。而且有的web网站访问量很大,都加密处理,服务器鸭梨山大。

    所以,一般对于敏感信息的处理,比如用户个人信息,才利用 HTTPS 加密通信。对一些其他非敏感的信息,就用 HTTP 通信即可。

    原因 2
    钱。

    上面提到的证书是要花钱从认证机构那购买的。所以,那些购买证书并不合算的服务以及一些个人网站,可能只会选择采用 HTTP 的通信方式。

    --不要用肉体的勤奋,去掩盖思考的懒惰--
  • 相关阅读:
    Spring boot 启动图片
    Spring Cloud 从入门到入门
    理解错误的 Arrays.asList()
    git github 对代码的管理
    【POJ 2154】Color
    CodeForces
    CodeForces
    CodeForces
    CodeForces
    [数据结构]Hash Table(哈希表)
  • 原文地址:https://www.cnblogs.com/pingguo-softwaretesting/p/14970453.html
Copyright © 2011-2022 走看看