SSL/TLS协议的通俗解读

150 阅读5分钟

SSL/TLS协议解决的是这样一个问题:在通信过程不安全的前提下,安全的通信

故事是这样的:Alice和Bob是小镇上的一对情侣,他们通过写信交流,小镇上的邮差总是可以偷看信件,Alice和Bob不能见面,也不能要求邮差不去偷看,他们该怎样做才能保证信件内容是安全的?

他们首先想到的是对信的内容加密,Alice加密Bob解密,这样邮差看到了加密内容也没有用。

image.png

这是个好办法,但是有一个问题,加解密必须要相同的密钥才行,Alice和Bob该如何约定这个密钥呢?

如果通过信件告知对方密钥,那肯定不安全,密钥会被邮差拿到。如果不沟通密钥能不能实现加解密呢?答案是可以!

  1. Alice先用自己的密钥加密,然后送信给Bob
  2. Bob解不开,没关系,他也用自己的密钥加密,然后送信给Alice
  3. Alice用自己的密钥解密,然后送信给Bob
  4. Bob用自己的密钥解密,拿到了明文

image.png

来看看安全性如何:

  1. 双方没有沟通密钥,用的是自己的密钥,是安全的
  2. 内容一直是加密的,邮差即使看到信件也没用,也是安全的

这个问题似乎解决了?然后并没有,邮差发现了他们这个办法之后,他也想了个办法:

  1. Alice先用自己的密钥加密,送信被邮差拦截了
  2. 邮差给密文加密,还给Alice
  3. Alice用自己的密钥解密,送信被邮差拦截了
  4. 邮差用自己的密钥解密,拿到了明文
  5. 邮差用自己的密钥加密,送给Bob
  6. Bob用自己的密钥加密,送信被邮差拦截了
  7. 邮差用自己的密钥解密,送给Bob
  8. Bob用自己的密钥解密,拿到了明文

image.png

这个过程中,Alice和Bob做法平时没什么两样,他们感知不到有什么问题,但是信息却泄露了,似乎无解了

历史上这个问题发展到这里停滞了很多很多年,直到非对称加密的出现

所谓的非对称加密,就是有一对密钥A和B,用A密钥加密的信息B密钥可以解密,用B密钥加密的信息A密钥也可以解密

现在重新看这个问题,就变成了Alice在家里弄出了一对密钥A和B,密钥A自己留着,密钥B送给Bob,怎么给Bob?答案是直接给!因为密钥B泄漏了无所谓,Alice不在乎,因为Bob用密钥B加密的信息,世界上再也没有人能解开,只有Alice能解开!

image.png

有人会说,邮差也有密钥B能解Alice发的信息,无所谓,因为邮差没有A密钥,他解不开Bob的加密信息,只要有一方密码解不开,信息安全就建立了!

但是邮差还有办法!他可以在分发密钥B的过程中,拦截密钥B,邮差制作密钥对C和D,把D发给Bob,让Bob误以为密钥D是Alice发给他的密钥B,这样Bob用密钥D加密的信息,邮差就可以用密钥C解开了

image.png

在这个过程中,Alice和Bob做法和平时没什么两样,他们感知不到有什么问题,但是信息却泄露了,现在的核心问题被转化为如何确定密钥B有没有被篡改?

轮到主角SSL/TLS登场了,他引入了一个第三者CA,CA也有一对密钥E、F,密钥E自己保留,密钥F放在了一个设备里,这个设备免费公开人人可以获取,并且可以识别密钥有没有被篡改,他是怎么做到的呢?

  1. CA要求Alice把他的公钥B在分发之前,先交给CA,CA用他的私钥E加密Alice的公钥B,得到了一个加密数据
  2. CA把加密数据给Alice,Alice把他叫证书
  3. Alice分发密钥B,邮差拦截B,把他的公钥D给了Bob
  4. Alice给Bob发消息,消息携带证书
  5. 邮差有CA的设备,虽然他可以解密证书拿到密钥B,但是他无法伪造证书,因为他没有CA的私钥E,他伪造的证书Bob解不开,证书只能原封不动的给Bob
  6. Bob有CA的设备,用CA设备解密证书,拿到了Alice的密钥B,对比一下邮差给的密钥D,就会发现被篡改了

image.png

这里的核心就是CA的设备,可以绕过邮差,成为信息安全的关键

这个设备就是浏览器,CA就是证书颁发机构,CA的公钥在浏览器里,用户通过浏览器请求域名的时候,域名的服务器首先把密钥和证书返回给用户,密钥可能被篡改但证书不可能被篡改,浏览器收到密钥和证书后就可以解密验证密钥的完整性了

真实的场景比这复杂的多,细节很多,但基本原理就这么多,希望能给你带来启发