HTTPS加密原理

  HTTP是未经加密的协议,其内容是以明文的方式传输的,也就是说,在传输过程中有可能被劫持、篡改,造成信息泄露等安全问题,所以我们需要安全的请求方式进行请求,也就是我们经常使用的HTTPS。

  HTTPS并不是应用层中一个新的协议,仅仅是在 应用层 和 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。通常,HTTP 直接和 TCP 通信。当使用 SSL时,则演变成先和 SSL 通信,再由 SSL和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披 SSL协议这层外壳的 HTTP。

HTTPS加密原理_第1张图片

  接下来我们就来探究一下HTTPS(SSL/TLS)的加密机制,参考自: 彻底搞懂HTTPS的加密原理 - 知乎

1、首先了解一下最初的加密方法 -- 共享密钥加密(也叫对称密钥加密):

  简单来说就是加密、解密共用同一个密钥,但这种方式是存在缺陷的。因为HTTP是明文传输,如果服务器生成的秘钥在传输给客户端的过程中就可能会被第三者劫持到,这样获取到秘钥的第三者就可以对双方的请求、响应进行解密,也就失去了加密的意义。所以,密钥安全地转交、以及密钥的保管是该加密方法存在的一些问题。

HTTPS加密原理_第2张图片

2、为了解决共享密钥加密中存在的问题,又提出了 -- 公开密钥加密(也叫非对称加密):

  简单来说就是有两把密钥,一把叫做私有密钥 (private key),另一把叫做公开密钥(public key),私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。公钥加密的内容必须用私钥解密,同样私钥加密的内容只能由公钥解开,这样我们就不用担心密钥是否安全地转交给了对方,貌似看起来也足够安全(其实不然)。

HTTPS加密原理_第3张图片

  一般地,由服务器先把公钥以明文的方式传输给浏览器,此后,浏览器发送的请求都将以公钥进行加密,服务器在接收到请求后再使用私钥进行解密,这样浏览器的请求无论如何都不会被第三者进行获取(前提是服务器私钥没有泄露)。但服务器在传输公钥的过程中,倘若公钥被第三者劫持,那么服务器传输的数据就会被第三者拿公钥进行解密获取,所以当前加密方式只能保证 浏览器->服务器 这一条路线是安全的,服务器 -> 浏览器还存在安全问题。

3、既然一组公钥、私钥可以保证单个方向进行安全传输,那么两组公钥、私钥是否就可以保证双向安全传输呢?

过程如下:

  • 某网站服务器拥有公钥A与对应的私钥A’;浏览器拥有公钥B与对应的私钥B’。
  • 浏览器把公钥B明文传输给服务器。
  • 服务器把公钥A明文给传输浏览器。
  • 之后浏览器向服务器传输的内容都用公钥A加密,服务器收到后用私钥A’解密。由于只有服务器拥有私钥A’,所以能保证这条数据的安全。
  • 同理,服务器向浏览器传输的内容都用公钥B加密,浏览器收到后用私钥B’解密。同上也可以保证这条数据的安全。

  这样可以解决上述问题,但是HTTPS最终并没有使用该加密方式,因为非对称加密算法非常耗时,而对称加密却很快,所以最终的加密方式采用了非对称加密+对称加密,这样非对称加密、解密各只需用一次即可。

过程如下:

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

4、看似完美的方案,其实还存在缺陷:

  混合加密的过程中需要服务器将其公钥传输给浏览器,但是能确保浏览器拿到的公钥就是所要访问的服务器的吗?倘若是被掉包了呢?比如:

  • 某网站拥有用于非对称加密的公钥A、私钥A’。
  • 浏览器向网站服务器请求,服务器把公钥A明文给传输浏览器。
  • 但是此时出现了一个中间人,他将公钥A保存下来,并把数据包中的公钥A替换为自己的公钥B。
  • 浏览器生成一个用于对称加密的密钥X,并用公钥B加密后传输给服务器。
  • 中间人抓取浏览器发送的数据,用私钥B’解密得到密钥X,再用公钥A加密密钥X后传输给服务器。
  • 服务器拿到后用私钥A’解密得到密钥X。
  • 此后,浏览器与服务器的交互就可以在不被发现异常的情况下被窃取数据。

  所以说,必须要确保浏览器获得的公钥是值得信任的。

5、数字证书

  为了解决冒充服务器的问题,CA机构(数字证书认证机构)出现了。

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

HTTPS加密原理_第4张图片

6、那么问题又来了,数字证书在传输的过程中倘若被篡改了呢?

  使用数字签名技术可以解决这个问题,但是就我目前而言,先有大概的了解就行,日后若需要再来学习总结~

总结:

    关于HTTPS加密机制的学习可谓是一环扣一环,对我而言收获很大。同时体会到一种方案的提出并不一定就是完美的,需要不断去完善,只有这样科技才能得以发展,学习也是如此,慢慢积累终会达到质变!

你可能感兴趣的:(计算机网络,https,http,ssl)