先来一张图描述HTTS的交互过程:
上图需要用到的算法有:非对称加密,对称加密,单项散列。
简化步骤如下:
1、客户端发起请求;
2、服务端返回证书;
3、客户端从验证证书得到服务端的公钥;
4、客户端生成随机数,并用公钥加密后发送给服务端;
5、服务器根据随机数生成对称密钥;
6、用对称密钥加密数据传输;
什么是证书?
这里的证书其实就是使用权威机构的私钥加密过的服务器公钥,所以制作证书通常是要付费的。那么问题来啦,能不能自己制作一个证书?
为什么不能直接下发服务器公钥给客户端?
如果直接下发公钥给中间人拦截获取了,那么以后的通信过程就无安全可言了。
如何验证证书的可靠性?
使用数字签名,上图的编号就是用来验证证书的有效性的,权威机构颁发给不同网站的证书都只能是唯一的。
浏览器通常是怎么解密出服务器的公钥的?
在非对称加密中,用私钥加密的数据只有公钥才能解密,那么客户端一开始的公钥是怎么获得的?其实任何的操作系统比如windows 10和Mac本身就已经带有受信任机构的根证书。
为何HTTPS建立之后使用对称算法加密?
因为只要保证密钥不会泄露出去,那么数据就是安全的,而且非对称加密算法相当耗费资源,不可能也没必要每次传输都使用。