我们知道http是明文传输的,所以:1数据可能被窃听和篡改 2察觉不到客户端和服务器之间是否有中间人。
为了防止1,可以对数据进行加密:
(可以看到https在内容传输的加密上使用的是对称加密)
为了防止2,要保证服务器的公钥确实是它的,可以请权威机构对公钥进行数字签名。
具体一点就是,签名方有一对密钥,暂称为CA公钥、CA密钥,先计算『服务器公钥和一些比如域名之类的其他信息』的摘要,然后用CA密钥对摘要进行加密,这些信息和加密后的摘要组成数字证书,然后颁发给服务器。当然证书还包括过期时间,颁发机构的指纹等信息。
CA的公钥提前安装在浏览器里,浏览器收到服务器的证书后,对比域名、过期时间等信息,用CA公钥对加密的摘要解密,如果能解密说明服务器是可信的,然后自己计算一遍摘要,如果能对得上,说明数据没被修改过。这样浏览器就安全的拿到了服务器的公钥。
参考:
HTTPS用的是对称加密还是非对称加密?