HTTPS 原理 对称加密 非对称加密 CA证书
先介绍对称加密
通信的双方,使用同一个secretKey,可以对密文进行解密,得到明文。
问题:在开放的internet如何交换secretKey,这本身就是个问题。这个交换的过程也是需要加密的。这就套娃了无解了。
再介绍非对称加密
通信双方各自有一个公钥,还有私钥;私钥只有自己知道,公钥全世界都知道;非对称加密算法,保证了用公钥加密的信息,可以用 对应的 私钥解密。
比如:Curry和Klay 需要进行通信。
Curry有私钥privateKeyCurry 和公钥publicKeyCurry
Klay有私钥privateKeyKlay 和 公钥publicKeyKlay
只有Curry知道自己的私钥privateKeyCurry
只有Klay知道自己的私钥privateKeyKlay
但是全世界都知道他们的公钥。
这个视频 打了个比方,就像一个信箱,全世界都可以知道Curry和Klay的信箱地址(公钥),但是只有他们自己可以用信箱钥匙(私钥)打开信箱获取信息(解密)
HTTPS就是结合了对称加密和非对称加密
Curry 和 Klay 通信
需要先约定一个解密的秘钥。(之前说只用对称加密无法解决这个约定问题)
于是我们用非对称加密来解决这个约定问题。
Curry 对 Klay 说: 让我们约定对称加密的秘钥是 symmetricKey吧。于是Curry 找到Klay的公钥(全世界都知道),然后用他的公钥publicKeyKlay对symmetricKey 进行加密,发给Klay;
Klay收到加密的密文,用自己的私钥privateKeyKlay解密,得到了Curry提供的symmetricKey。
约定好了symmetricKey,从此以后他俩就可以愉快地使用对称加密,都用symmetricKey加密、解密要传输的信息了。
还有啥问题?
- 通信的中间过程有可能信息被篡改
- 攻击者Durant可以伪装成Klay跟你进行通信
如何解决这些问题?
这时候就需要CA证书了。
CA证书由第三方权威机构颁发,每个公司需要去申请这个证书。
当Klay开了一家叫Klay的公司,他就去花大价钱申请了一个CAKlay证书。CA这个权威机构会对Klay公司的证书明文做一些hash得到摘要,再进行加密(用CA权威机构的私钥),得到一个签名。
通信过程中,Curry先找Klay公司要证书,Klay公司返回证书明文以及证书签名,Curry拿到证书明文,使用相同的hash得到摘要abstractFromKlay;然后Curry客户端内用CA机构的公钥对签名进行解密,得到证书摘要(abstractFromCA),比较abstractFromCA和abstractFromKlay,如果一致则说明证书有效
流程图
这个流程图很不错