https为什么安全
若没有ca证书:
- 客户端请求服务端,获取公钥
- 客户端使用公钥加密随机字符串
- 服务端使用私钥解密随机字符串
- 使用随机字符串做堆成加密
如果有中间人劫持
- 中间人伪装成服务端 对客户端进行交互。
- 中间人伪装成客户端 对服务端进行交互。
实现很简单,中间人将自己的公钥发给客户端,能够实现与客户端通信。收到服务端的公钥,能与服务端通信。实现劫持。
中间人必须要更换为自己公钥,否则无法解密客户端发过来的信息(必须要服务端私钥)。
ca证书防御
中间人攻击能成功主要是因为客户端无法确认获取到的公钥是服务端发出的
所以需要一个证明文件,证明这个公钥是服务端的。ca就是证明文件。
- 浏览器内嵌了几个受信任的签发机构的公钥。
- 证书含有域名信息,签发机构,服务端公钥,并且有ca签发机构使用私钥与证书明文摘要加密生成的签名。其中摘要是某种算法获取的。
- ca证书签发时保证域名是所有者的。
浏览器获取ca证书后找到证书的签发机构,获取内嵌对应签发机构的公钥,使用此公钥对签名解密,获取证书明文摘要,如果证书明文摘要相同,则证明没有掉包。可以使用证书里面的服务器公钥进行通信。