HTTPS 加密原理

338 阅读3分钟

1 对称加密

即消息使用同一个密钥进行加密和解密。

  • 优点:效率高、算法简单,适合加密大量数据
  • 缺点:安全性差

image.png

2 非对称加密

A向B发送消息,使用B的公钥进行加密,B收到密文后用自己的私钥进行解密,反之亦然。

  • 优点:安全
  • 缺点: 慢,无法确认公钥的来源合法性以及数据完整性

image.png

3 非对称加密 + 对称加密

例如:

  1. 某网站拥有用于非对称加密的公钥A、私钥A’。
  2. 浏览器向网站服务器请求,服务器把公钥A明文给传输浏览器。
  3. 浏览器随机生成一个用于对称加密的密钥X,用公钥A加密后传给服务器。
  4. 服务器拿到后用私钥A’解密得到密钥X。
  5. 这样双方就都拥有密钥X了,且别人无法知道它。之后双方所有数据都通过密钥X加密解密即可。
  • 优点:快,安全
  • 缺点:中间人攻击

关于中间人攻击

2、3种方法中,在连接的开始,B的公钥会发送给A。如果中间人在此处拦截B的公钥,并将自己的公钥发送给A,A误以为中间人是B,将消息或者对话密钥用中间人的公钥进行加密。中间人截取A发送给B的消息,并用自己的私钥解密,就可以随意读取消息内容,再用B的公钥加密,将消息传给B。

image.png

如何验证公钥的来源合法性

数字证书

在网站使用 HTTPS 前,需要像 CA 机构申领一份数字证书,数字证书里含有证书持有者信息、公钥信息等。服务器把证书传给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明“该公钥对应该网站”。

数字证书包括公钥数字签名

image.png

数字签名制作

公钥通过hash算法可以得到消息摘要,数据摘要使用CA的私钥加密得到数字签名。

image.png

校验

把数字证书中的公钥通过hash算法得到消息摘要,数字签名通过CA公钥解密得到的消息摘要进行对比。

image.png

中间人有可能把证书掉包吗?

假设有另外一个网站 C 也拿到了CA机构认证的证书,它想劫持 B 网站的信息。于是它成为中间人拦截到了 B 传给浏览器的证书,然后替换成自己的证书,传给浏览器,之后浏览器就会错误的拿到 C 的证书里的公钥了。

但这样并不会出现上文中提到的“中间人攻击”的漏洞,因为证书里包含了网站A的信息,包括域名,浏览器把证书里的域名与自己请求的域名对比一下就知道有没有被掉包了。

每次进行HTTPS请求时都必须在SSL/TLS层进行握手传输密钥吗?

服务器会为每个浏览器(或客户端软件)维护一个 session ID,在 TLS 握手阶段传给浏览器,浏览器生成好密钥传给服务器后,服务器会把该密钥存到相应的 session ID 下,之后浏览器每次请求都会携带 session ID服务器会根据 session ID找到相应的密钥并进行解密加密操作,这样就不必要每次重新制作、传输密钥了。

小结

HTTPS 建立连接的阶段也就是 非对称加密 + 对称加密 + 数字证书协同 作用的过程。

参考文章

常见的加密算法、原理、优缺点、用途

HTTPS原理以及握手阶段

彻底搞懂HTTPS的加密原理