SSL/TLS协议简述

互联网的通信安全(https协议)是建立在SSL/TLS协议之上…

本文主要回答两大问题:
①: 传统 http 协议存在哪些问题
②: SSL/TLS 协议是如何解决这些问题的

传统 http 协议存在哪些问题

不使用 SSL/TLS 的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。

  1. 窃听风险(eavesdropping):第三方可以获知通信内容;
  2. 篡改风险(tampering):第三方可以修改通信内容;
  3. 冒充风险(pretending):第三方可以冒充他人身份参与通信。

SSL/TLS 协议是如何解决这些问题的

窃听风险

要解决窃听风险的问题,就必须对信息进行加密处理。
而目前对信息的加密主要有两大类:对称加密与非对称加密(又称:公钥加密)。

简单理解这两种加密类型就是对称加密的加密与解密用的是同一套密文,而公钥加密的加密用“公钥”,解密用“私钥”。
tip: 有时我们也会用私钥加密,然后将加密后的信息传递给拥有公钥的对方,以证明:我是我。(这一过程俗称数字签名,你的私钥就相当于你的指纹,一旦你用自己的私钥对文件进行加密,也就意味只该文件上面有了你的指纹,任何人进行篡改都会被发现)

https 协议在进行信息传递的过程中就是通过公钥加密(目前简单这样理解)来保证传输的信息即使被人截获,对方也不能知道信息的具体内容。如此这般便解决了被窃听的隐患。

篡改风险

其实理解了前面讲的窃听风险的规避原理,我们便自然知道在客户端与服务器端正常通信的过程中,第三方无法知道双方信息的解密私钥,也无法知道双方信息的加密公钥。所以一旦第三方对加密后的信息进行篡改,真正的接收信息方也就无法通过自己的私钥来对信息进行解密,也就进一步知道信息被篡改了。

上面讲的是在双方在建立信任之后的防篡改机制。双方在建立信任之前,客户端向服务器端索要并验证公钥(该公钥由服务器给出)。此时,客户端如何认定这个公钥就是由目标服务器给出的呢?

解决方法:将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。
(数字证书是权威机构 CA 给各家服务器发的“良民证”)

冒充风险

冒充风险其实有着两重含义:① 服务器被冒充; ② 客户端被冒充。
下面让老夫来唠一唠:

服务器为什么不会被冒充?
那就要请出上文提到的数字证书。服务器在表明自己身份的时候是需要出示自己的“良民证”的,而伪装者是无法拥有与之匹配的“良民证”的。

客户端为什么不会被冒充?
客户端在得到服务器给出的公钥之后,用这个公钥加密自己生成的一个随机码,最后发送出去。
此时,这个随机码就是:天不知,地不知,客户端知,服务器知。有了这个随机码,客户端与服务器就如同确认过眼神,双方都认定对方是对的人。第三者根本没有假扮成原配插足的可能性。

SSL/TLS 协议的握手过程

SSL/TLS 协议的握手过程简单地讲就是客户端与服务器确认眼神的过程。
“握手阶段”涉及四次通信,我们一个个来看。需要注意的是,”握手阶段”的所有通信都是明文的。

客户端发出请求

我是谁,我具备什么样的能力。

  1. 支持的协议版本,比如TLS 1.0版;
  2. 一个客户端生成的随机数,稍后用于生成”对话密钥”;
  3. 支持的加密方法,比如RSA公钥加密;
  4. 支持的压缩方法。

服务器回应

确认双方的密码本,并出示自己的“良民证”。

  1. 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信;
  2. 一个服务器生成的随机数,稍后用于生成”对话密钥”;
  3. 确认使用的加密方法,比如RSA公钥加密;
  4. 服务器证书。

客户端回应

用对方给的密码本加密“本人是谁”的信息。

  1. 一个随机数。该随机数用服务器公钥加密,防止被窃听;
  2. 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
  3. 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。

服务器的最后回应

根据前三次会话产生的三个密语,生成一个“会话密钥”,也就是对的眼神。

  1. 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
  2. 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

更多的事

会话密码公钥加密有什么关系?
首先了解一点,公钥加密是计算量很大的加密方式,而且数据量越大,计算量越大。
如果对整个信息都进行公钥加密的话,会消耗双方大量的性能。
所以实际上的做法是:消息通过对称加密来加密,而对称加密的解密密钥是通过非对称加密来加密。
如此这般,方能兼顾安全与性能。

叶思玄 wechat
如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!