HTTPS是如何保证安全的
过程比较复杂,我们得先理解两个概念
对称加密:即通信的双方都使用同一个秘钥进行加解密,比如特务对暗号(天王盖地虎,小鸡炖蘑菇),这就属于对称加密
非对称加密:
- 私钥 + 公钥 = 密钥对
- 即用私钥加密的数据,只有对应的公钥才能解决,用公钥加密的数据,只有对应的私钥才能解密
- 因为通信双方的手里都会有一套自己的密钥对,通信之前会把自己这边的公钥发送给对方
- 然后再拿着对方发送过来的公钥对数据进行加密发送给对方,对方再用私钥对公钥进行解密
如git中 远程仓库就要存储自己本地的公钥
非对称加虽然安全性更高,但是带来的问题就是会相对的较慢,影响性能。
解决方案:
那么结合两种加密方式,将对称加密的秘钥使用非对称加密的公钥进行加密,然后发出去,接收方使用私钥进行解密得到对称加密的秘钥,然后双方就可以使用对称加密来进行沟通。
此时就又带了一个问题,中间人的安全问题:
如果此时有一个图谋不轨的中间人,存在于客户端和服务端之间,这个中间人只需要将原本双方通信护法的公钥换成自己的公钥,这样中间人就可以轻松解密通信双方所发送的数据。
所以这个时候就需要一个安全的第三方颁发证书(CA),证明身份的身份,防止被中间人攻击。
证书中包括:签发者、证书用途、使用者公钥、使用者私钥、使用者的HASH算法、证书到期时间等。
但是这个图谋不轨的中间人篡改了这个证书,那么我们的证书岂不是就没有用了吗?这个时候就需要一个新的技术,数字签名。
数字签名就是用CA自带的HASH算法对证书的内容进行HASH得到一个摘要,再用CA的私钥加密,最终组成数字签名。
当别人把他的证书发过来的时候,我在用同样的HASH算法,再次生成消息摘要,然后用CA的公钥对数字签名解密,得到CA创建的消息摘要,两者一比,就知道中间有没有被人篡改了。
这个时候就能最大程度保证通信的安全了。