『计算机网络』小白对 HTTPS 的理解

1. 为什么需要 HTTPS

超文本传输协议 HTTP 协议被用于在 Web 浏览器和网站服务器之间传递信息,HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了 Web 浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP 协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

为了解决 HTTP 协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议 HTTPS,为了数据传输的安全,HTTPS 在 HTTP 的基础上加入了 SSL / TLS 协议,SSL / TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

HTTPS 协议是由 SSL / TLS + HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全。

HTTPS 协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

2. HTTP 与 HTTPS 的主要区别

  • HTTPS 协议需要到 CA 申请证书,一般免费证书较少,因而需要一定费用
  • HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL / TLS 加密传输协议
  • HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443
  • HTTP 的连接很简单,是无状态的;HTTPS 协议是由 SSL / TLS + HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全

3. HTTPS 建立过程

HTTPS 的大体建立 SSL 的过程如下所示:

在这里插入图片描述

下面解释为什么这么做:

  1. 公钥和私钥

    RSA 是指非对称加密,加密结果是有一对秘钥,用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据, 只有对应的私钥才能解密

    所以我们可以派发公钥,自己保留好私钥就行了

    在这里插入图片描述

  2. 非对称加密的缺点

    非对称加密时需要使用到接收方的公匙对消息进行加密,但是公匙不是保密的,任何人都可以拿到,中间人也可以。那么中间人可以做两件事,第一件是中间人可以在客户端与服务器交换公匙的时候,将客户端的公匙替换成自己的。这样服务器拿到的公匙将不是客户端的,而是中间人的。服务器也无法判断公匙来源的正确性。第二件是中间人可以不替换公匙,但是他可以截获客户端发来的消息,然后篡改,然后用服务器的公匙加密再发往服务器,服务器将收到错误的消息。

    中间商可以冒充服务器篡改公钥,如下图:

    在这里插入图片描述

  3. 数字签名

    数字签名是个什么东西呢?它是信息的指纹。但是这不是重点,重点是数字签名的生成过程。数字签名的生成有两个步骤:

    • 对明文进行哈希,得到一串哈希值

    • 对第一步得到的哈希值用私钥加密

    在这里插入图片描述

    数字签名是如何使用的呢?其实看一张图就明白了。数字签名会随着内容一起被发送出去,接收方首先用公钥解密数字签名得到哈希值 h1,然后对内容用同样的算法计算哈希值 h2,如果 h1 = h2,那么说明内容没有被串改过。

    在这里插入图片描述

    然而这个过程也存在风险,如果中间商篡改了公钥,那么他就可以伪造数字签名,一样完蛋。如下:

在这里插入图片描述

所以引入数字证书。

  1. 数字证书

    数字证书包含两部分内容: 证书信息数字签名

    这里的证书信息中就包含了服务器发送过来的信息(包括服务器公钥),当然还有一些其他信息,比如证书名称、发布机构、有限期、哈希算法等。

    数字签名就是对证书信息进行哈希,然后用 CA 认证中心的私钥加密的结果。

    在这里插入图片描述

    这里特别强调数字签名是用 CA 认证中心的私钥加密的,因为这样才能防止中间商串改公钥。这里还有一点需要注意,那就是操作系统会自动安装 CA 认证中心的公钥,所以,每个客户端都默认有 CA 认证中心的公钥。

    引入数字证书后的使用过程如下:

    在这里插入图片描述

    如果中间商想伪造数字证书,篡改数字证书中的公钥,由于中间商没有 CA 认证中心的私钥,无法伪造数字签名,于是也就无法伪造数字证书了:

    在这里插入图片描述

    但是这样就万无一失了吗?并不是,如果中间商也在CA认证中心注册了数字证书,并且用这个合法的数字证书替换了服务器的数字证书,还是会完蛋。但这就不是我们该操心的问题了,这是 CA 认证中心该考虑的问题,应该给什么人发证书,拒绝给什么人发证书。只有 CA 认证中心能够区分好人和坏人,我们才是安全的。

    其实到最后就是客户端把对服务器的信任委托给了 CA 认证中心,因为服务器是不一定可信的,那就创造一个相对一定可信的第三方。

  2. 证书校验

    根据以上内容,我们可以得出在 HTTPS 通信中,客户端整数校验的过程:

    在这里插入图片描述

  3. 对称加密通信

    真正的 HTTPS 通信并不是通过公钥和私钥加密的,公钥和私钥只用在握手过程中,当客户端请求到真正的公钥后,会生成一个随机数(对称密钥)并用公钥加密,发送给服务器,后续的通信就用对称密钥加密了。这样做的原因是非对称加密的性能相对对称加密来说会慢上几倍甚至几百倍,比较消耗系统资源。正是因为如此,HTTPS 将两种加密结合了起来。

4. HTTPS 的缺点

虽然说HTTPS有很大的优势,但其相对来说,还是存在不足之处的:

  • HTTPS 协议握手阶段比较费时,会使页面的加载时间延长近 50%,增加 10% 到 20% 的耗电
  • HTTPS 连接缓存不如 HTTP 高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响
  • SSL 证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用
  • SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗
  • HTTPS 协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行

5. HTTPS 优化

5.1 HSTS 重定向技术

HSTS(HTTP Strict Transport Security)技术,启用 HSTS 后,将保证浏览器始终连接到网站的 HTTPS 加密版本。

  1. 用户在浏览器里输入 HTTP 协议进行访问时,浏览器会自动将 HTTP 转换为 HTTPS 进行访问,确保用户访问安全

  2. 省去 301 跳转的出现,缩短访问时间

  3. 能阻止基于 SSL Strip 的中间人攻击,万一证书有错误,则显示错误,用户不能回避警告,从而能够更加有效安全的保障用户的访问

5.2 TLS 握手优化

在传输应用数据之前,客户端必须与服务端协商密钥、加密算法等信息,服务端还要把自己的证书发给客户端表明其身份,这些环节构成 TLS 握手过程。

采用 False Start (抢先开始)技术,浏览器在与服务器完成 TLS 握手前,就开始发送请求数据,服务器在收到这些数据后,完成 TLS 握手的同时,开始发送响应数据。

开启 False Start 功能后,数据传输时间将进一步缩短。

5.3 Session Identifier(会话标识符)复用

如果用户的一个业务请求包含了多条的加密流,客户端与服务器将会反复握手,必定会导致更多的时间损耗。或者某些特殊情况导致了对话突然中断,双方就需要重新握手,增加了用户访问时间。

  1. 服务器为每一次的会话都生成并记录一个 ID 号,然后发送给客户端
  2. 如果客户端发起重新连接,则只要向服务器发送该 ID 号
  3. 服务器收到客户端发来的 ID 号,然后查找自己的会话记录,匹配 ID 之后,双方就可以重新使用之前的对称加密秘钥进行数据加密传输,而不必重新生成,减少交互时间

5.4 开启 OCSP Stapling,提高 TLS 握手效率

服务端主动获取 OCSP 查询结果并随着证书一起发送给客户端,从而客户端可直接通过 Web Server 验证证书,提高 TLS 握手效率。

服务器模拟浏览器向 CA 发起请求,并将带有 CA 机构签名的 OCSP 响应保存到本地,然后在与客户端握手阶段,将 OCSP 响应下发给浏览器,省去浏览器的在线验证过程。由于浏览器不需要直接向 CA 站点查询证书状态,这个功能对访问速度的提升非常明显。

5.5 完全前向加密 PFS,保护用户数据,预防私钥泄漏

非对称加密算法 RSA,包含了公钥、私钥,其中私钥是保密不对外公开的,由于此算法既可以用于加密也可以用于签名,所以用途甚广,但是还是会遇到一些问题:

  • 假如我是一名黑客,虽然现在我不知道私钥,但是我可以先把客户端与服务器之前的传输数据(已加密)全部保存下来,如果某一天,服务器维护人员不小心把私钥泄露了,或者服务器被我攻破获取到了私钥,那我就可以利用这个私钥,破解掉之前已被我保存的数据,从中获取有用的信息。

所以为了防止上述现象发生,我们必须保护好自己的私钥。

如果私钥确实被泄漏了,那我们改如何补救呢?那就需要 PFS(perfect forward secrecy)完全前向保密功能,此功能用于客户端与服务器交换对称密钥,起到前向保密的作用,也即就算私钥被泄漏,黑客也无法破解先前已加密的数据。

维基解释是:长期使用的主密钥泄漏不会导致过去的会话密钥泄漏。

实现此功能需要服务器支持以下算法和签名组合:

  • ECDHE 密钥交换、RSA 签名
  • ECDHE 密钥交换、ECDSA 签名

5.6 HTTPS 优化总结易记版

1、HSTS 重定向技术:将 HTTP 自动转换为 HTTPS,减少 301 重定向

2、TLS 握手优化:在 TLS 握手完成前客户端就提前向服务器发送数据

3、会话标识符:服务器记录下与某客户端的会话 ID,下次连接客户端发 ID 过来就可以直接用之前的私钥交流了

4、OSCP Stapling:服务器将带有 CA 机构签名的 OCSP 响应在握手时发给客户端,省的客户端再去 CA 查询

5、完全前向加密 PFS:使用更牛逼复杂的秘钥算法

猜你喜欢

转载自blog.csdn.net/dreaming_coder/article/details/114128610
今日推荐