https是在http上增加了ssl协议。
客户端与服务端的内容采用对称加密,如果直接使用非对称加密有性能损失。不能直接使用,服务端的数据会被攻击者解密
为了保证密钥的安全,在对称加密的密钥上再进行一次非对称加密。
用CA证书确认公钥的真实性。
具体过程,首先客户端发起https请求,服务端返回公钥,客户端将对称加密生成的密钥用服务端发来的公钥加密后发回给服务端,服务端用私钥解密出客户端的密钥,之后客户端服务端使用密钥加密内容进行通信。由于私钥只有服务端有,即使客户端的请求被监听也无法解密出数据。
这边存在如何确认服务端返回的公钥是否真实的问题,攻击者可以将服务器返回的公钥替换成自己的公钥在发送给客户端,客户端用虚假公钥加密后发送给攻击者,攻击者利用私钥解密出密钥再利用真正的服务器公钥加密密钥发送给服务端,这时攻击者起到了中间人作用。
这时CA证书的作用就体现了,CA证书里面包含一些明文信息包括服务端的公钥和证书签名,CA证书提供商在确认域名属于你(比如在域名子目录下放置文件,文件相同即确认归你所有)之后会将你提供的公钥和域名相关信息用提供商自己的私钥加密,即证书签名,这时服务端就不单纯返回公钥了,直接返回证书,浏览器判断证书安全即开始通信。浏览器如何判断证书安全,浏览器自带提供商证书,里面包含着提供商公钥,将证书的签名解密后的内容与明文信息进行比较就能确保证书没被修改,因为改明文内容签名对不上,不改签名解密出来的明文又对不上。归根是浏览器没有信任攻击者的证书(让提供商给你的公钥签名或者让浏览器信任你的证书)。这里相当双方都信任提供商,提供商容易干坏事。
引申出fiddler抓https包原理,把fiddler当作提供商,信任fiddler的证书,fiddler成为中间人。