简述HTTPS的通信机制

31次阅读

共计 1195 个字符,预计需要花费 3 分钟才能阅读完成。

HTTPS 是什么?

HTTPS = HTTP + 加密 + 认证 + 完整性保护 。简单点说 HTTPS 可以看做是对 HTTP 的一个扩展,在 HTTP 的基础上添加了一些其他的东西。 加密、认证和完整性保护 ,添加这么些东西就很明显是为了保证 数据的安全性

HTTP 的不足:

  1. 通信使用明文(未加密),内容可能会被窃听
  2. 没有验证通信方的身份,可能遭遇伪装
  3. 无法证明报文的完整性,可能会被篡改

HTTPS 的作用便是为了解决上述问题。HTTPS 并不是一个新的协议,只是 HTTP 披了一层 SSL 或 TLS 的马甲。在四层模型中,HTTP 位于应用层,是直接和传输层的 TCP 进行通信。当使用了 SSL 之后,则是 HTTP 和 SSL 通信,然后 SSL 再和 TCP 进行通信。

注:TLS 实际上是以 SSL3.0 为基准制定的。当前主流版本是 SSL3.0 和 TLS1.0。

关于 SSL 的加密方式

HTTPS 相对于 HTTP 最重要的一点则是在对于数据的加密解密上。

共享秘钥加密(对称加密)

加密和解密使用同一个秘钥的方式被称为共享秘钥加密。以这种方式加密时必须将秘钥也发给对方,在复杂的网络上传输秘钥时,如果通信被监听,秘钥就很可能会落入到攻击者的手中,加密便失去了意义。

公开秘钥加密(非对称加密)

公开秘钥加密使用的是一对非对称的秘钥,一个叫做公开秘钥,一个叫做私有秘钥。顾名思义,任何人都可以得到公开秘钥,而私有秘钥则不能让其他人知道。
使用公开秘钥加密的方式,由发送方使用公钥对信息进行加密,接收方则使用私钥进行解密。使用这种方式则不需要担心秘钥被攻击者盗走。

HTTPS 采用的是混合的方式

公开秘钥加密方式由于更加复杂,因此在通信是使用公开秘钥加密的方式则效率相对来说会很低,而共享秘钥加密的效率会很高,但却不能让秘钥安全的进行交换。
所以应该充分利用两者的优势,使用公开秘钥加密传输共享秘钥加密使用的秘钥,然后使用共享加密进行通信。

但还存在一个问题:不能保证公开密钥本身就是有效的。为了解决这个问题,数字证书认证机构(CA)粉墨登场。

  1. 服务器运营人员会向 CA 提出公开秘钥的申请,CA 在判明申请者的神风之后,会对申请的公开秘钥进行数字签名并将其放入公钥证书中
  2. 服务器会将公钥证书放松给客户端
  3. 客户端使用公钥证书的公开秘钥(一般内置在浏览器中)对证书进行验证
  4. 验证通过后,客户端便拿到了公开秘钥加密中的公开秘钥

HTTPS 的通信过程


上面说了那么多,再看看这张图。有没有感觉像是一个套娃的过程。
使用共享秘钥加密,则需要交换秘钥 => 使用公开秘钥加密交换秘钥,则需要交换公开密钥 => CA 认证,发送公开秘钥证书 => 验证有效性,取出公开秘钥,对生成的秘钥(随机字符串)进行加密发送给服务器 => 服务器利用私有秘钥解密出秘钥 => 开始通信

为什么不一直使用 HTTPS?

  • 由于存在加密过程和额外的 SSL 通信,处理速度会变慢
  • AC 认证需要花费增加额外的开销
  • 加密通信会消耗服务器和客户端更多的 CPU 和内存

参考:《HTTP 图解》

正文完
 0