[趣谈网络协议学习] 15 HTTPS协议:点外卖的过程原来这么复杂

对称加密

对称密钥算法(英语:Symmetric-key algorithm)又称为对称加密、私钥加密、共享密钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。加密和解密的密钥相同。效率高。

非对称加密

公开密钥密码学(英语:Public-key cryptography,也称非对称式密码学)是密码学的一种算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥;一个用作加密,另一个则用作解密。使用其中一个密钥把明文加密后所得的密文,只能用相对应的另一个密钥才能解密得到原本的明文;甚至连最初用来加密的密钥也不能用作解密。由于加密和解密需要两个不同的密钥,故被称为非对称加密;不同于加密和解密都使用同一个密钥的对称加密。虽然两个密钥在数学上相关,但如果知道了其中一个,并不能凭此计算出另外一个;因此其中一个可以公开,称为公钥,任意向外发布;不公开的密钥为私钥,必须由用户自行严格秘密保管,绝不透过任何途径向任何人提供,也不会透露给被信任的要通信的另一方。

加密和解秘的密钥不同。安全性高。有两对,每对中一把是公钥,一把是私钥。公钥加密的信息只有私钥能解。私钥加密的信息只有公钥能解。

客户端也需要有自己的公钥和私钥,并且客户端要把自己的公钥,给外卖网站。客户端给外卖网站发送的时候,用外卖网站的公钥加密。外卖网站给客户端发送消息的时候,使用客户端的公钥。

数字证书

外卖网站需要把公钥传给客户端,但是客户端如何验证这个公钥一定是外卖网站给的,而不是黑客?

数字证书可以验证外卖网站公钥的合法性,由权威机构(Certificate Authority,CA)颁发,权威机构的合法性由上层权威机构证实,层层向上追溯,直到root权威机构。
证书里面有什么呢?公钥,还有证书的
所有者
,证书的发布机构和证书的有效期

权威机构会给证书卡一个章,我们称为签名算法。签名算法大概这样工作:一般是对信息做一个 Hash 计算,得到一个 Hash 值,这个过程是不可逆的,也就是说无法通过 Hash 值得出原来的信息内容。在把信息发送出去时,把这个 Hash 值加密后,作为一个签名和信息一起发出去。CA用自己私钥通过签名算法给数字证书签名。

客户端不会从外卖网站上得到一个公钥,而是会得到一个证书,这个证书有个发布机构 CA,你只要得到这个发布机构 CA 的公钥,去解密外卖网站证书的签名,如果解密成功了,Hash 也对的上,就说明这个外卖网站的公钥没有啥问题。

又有新问题了。要想验证证书,需要 CA 的公钥,问题是,怎么确定 CA 的公钥就是对的呢?
CA 的公钥也需要更牛的 CA 给它签名,然后形成 CA 的证书。要想知道某个 CA 的证书是否可靠,要看 CA 的上级证书的公钥,能不能解开这个 CA 的签名。可以一直上溯,直到全球皆知的几个著名大CA,称为root CA,做最后的背书。通过这种层层授信背书的方式,从而保证了非对称加密模式的正常运转。

还有一种证书,称为Self-Signed Certificate,就是自己给自己签名。这个给人一种“我就是我,你爱信不信”的感觉。

HTTPS 的工作模式

HTTPS 协议的总体思路: 非对称加密的公钥私钥主要用于传输对称加密的秘钥,而真正的双方大数据量的通信都是通过对称加密进行的。

HTTPS 的工作模式

  1. 登录一个外卖网站的时候,由于是 HTTPS,客户端会发送 Client Hello 消息到服务器,以明文传输 TLS 版本信息、加密套件候选列表、压缩算法候选列表等信息。另外,还会有一个随机数A,在协商对称密钥的时候使用。
  2. 外卖网站返回 Server Hello 消息, 告诉客户端,服务器选择使用的协议版本、加密套件、压缩算法等,还有一个随机数B,用于后续的密钥协商。
  3. 外卖网站会给一个服务器端的证书,然后说:“Server Hello Done,我这里就这些信息了。”
  4. 客户端对外卖网站给的服务器端的证书进行验证,从自己信任的 CA 仓库中,拿 CA 的证书里面的公钥去解密外卖网站的证书,这个过程中可能会不断往上追溯 CA、CA 的 CA、CA 的 CA 的 CA,直到一个授信的 CA,就可以了。
  5. 证书验证完毕之后,这个外卖网站可信,客户端计算产生随机数字 Pre-master,发送 Client Key Exchange,用卖网站给的服务器端的证书中的公钥加密,再发送给服务器,服务器可以通过私钥解密出来。
  6. 这样无论是客户端还是服务器,都有了三个随机数,分别是:1中客户端的随机数A、2中服务器的随机数B,以及5中客户端刚生成的 Pre-Master 随机数。通过这三个随机数,可以在客户端和服务器产生相同的对称密钥。
  7. 有了对称密钥,客户端就可以说:“Change Cipher Spec,咱们以后都采用协商的通信密钥和加密算法进行加密通信了。”客户端然后发送一个 Encrypted Handshake Message,将已经商定好的参数等,采用协商密钥进行加密,发送给服务器用于数据与握手验证。
  8. 同样,服务器也可以发送 Change Cipher Spec,说:“没问题,咱们以后都采用协商的通信密钥和加密算法进行加密通信了”,并且也发送 EncryptedHandshake Message 的消息将已经商定好的参数等,采用协商密钥进行加密,发送给客户端。
    9、当双方握手结束之后,就可以通过对称密钥进行加密传输了。

小结

加密分对称加密和非对称加密。对称加密效率高,但是解决不了密钥传输问题;非对称加密可以解决这个问题,但是效率不高。
非对称加密需要通过证书和权威机构来验证公钥的合法性。
HTTPS 是综合了对称加密和非对称加密算法的 HTTP 协议。既保证传输安全,也保证传输效率。

参考资料:

趣谈网络协议(极客时间)链接:
http://gk.link/a/106nW

对称密钥加密:
https://zh.wikipedia.org/wiki/%E5%B0%8D%E7%A8%B1%E5%AF%86%E9%91%B0%E5%8A%A0%E5%AF%86

公开密钥加密:
https://zh.wikipedia.org/wiki/%E5%85%AC%E5%BC%80%E5%AF%86%E9%92%A5%E5%8A%A0%E5%AF%86


GitHub链接:
https://github.com/lichangke/LeetCode
知乎个人首页:
https://www.zhihu.com/people/lichangke/
CSDN首页:
https://me.csdn.net/leacock1991
欢迎大家来一起交流学习

发布了170 篇原创文章 · 获赞 16 · 访问量 2837

猜你喜欢

转载自blog.csdn.net/leacock1991/article/details/100716347
今日推荐