Https 与对称加密和非对称加密
为什么要有 https
没有 https,用户传输的数据,如账号密码,会被不法分子截获。
加密进化史
对称加密
客户端请求一次服务端后,服务端给客户端一个密钥。然后他们传输的数据会用密钥加密。
但第一次告诉客户端密钥的时候也可能被不法分子截获。
非对称加密
服务端有自己的公钥和私钥。客户端请求一次服务端后,服务端提供自己的公钥,客户端(浏览器)收到后自己生成一个密钥用服务端传来的公钥加密再传给服务端。然后服务端再用私钥解密。这样它们就可以进行上面的对称加密传输了。
这样解决了在第一次服务端向客户端做出响应的过程中,不法分子截取到密钥的漏洞。
但是,不法分子可以截获服务端发来的公钥,然后向客户端发送自己的公钥。然后,客户端要传给服务端的就是不法分子的公钥加密的密钥。不法分子再次截获,用自己的私钥解密,拿到密钥,再用之前截获的公钥加密传给服务端。这样一来,有了用于对称加密的密钥,以后就可以随意窃取信息了。
证书颁发机构颁发证书
如下图,我是用浏览器查看 CSDN 网站的 https 相关信息:
以下是百度百科中的一句话:
证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构。是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
证书里面大概有些什么内容呢?
证书颁发机构的信息、服务端信息、机构私钥加密的服务端公钥、机构私钥加密的证书签名等,如下图(简化):
其中,证书签名是基于服务端信息生成的。
关于公钥、私钥补充一点:可以用公钥加密、私钥解密,也可以用私钥加密、公钥解密。
服务端提交自己的域名就可以找 CA 购买证书了。
客户端发出第一次请求之后,服务端返回给客户端一个证书。客户端接着会验证证书真伪,如何验证?
其实,各大浏览器和操作系统本身已经维护了所有权威 CA 的名称和公钥。
所以客户端从证书中得知是哪个机构颁发的证书以后,可以从本地找到对应的机构公钥,这样就可以解密出证书签名和服务端公钥。
客户端通过证书签名生成规则自己生成一个证书签名与解密出的证书签名对比,如果一致,就可以拿服务端公钥加密会话密钥了。到此,后面的过程就和之前差不多了。
因为客户端只维护了权威机构的公钥,所以不法分子也无可奈何了。
总结
可以看出,在有了会话用对称加密的点子后,后面的优化,都是针对第一次服务端向客户端的传输可能会被截获的情形。
CA 相当于在两端事先安排好了一组公钥和私钥,这样就打破了第一次传输总是透明的瓶颈。