一看就懂的 SSL 加密原理

对称加密

加密和解密使用的是同一个密钥,缺点:服务器生成密钥传给浏览器时容易被中间人劫持,之后他就能用密钥解开双方传输的内容了。

非对称加密

加密和解密是不同的密钥,分别是公钥和私钥,公钥加密的内容需要私钥解密,私钥加密的内容需要公钥解密,私钥服务器保存,公钥发给客户端。接下来客户端使用公钥加密发送的内容,服务端使用私钥解密,服务端发送使用私钥加密的内容,客户端使用公钥解密;
缺点:非对称加密十分耗时,对称加密快得多;

非对称加密 + 对称加密

服务端有一对公钥和私钥,将公钥发送给客户端,客户端随机生成一个对称加密密钥 X,使用公钥加密将对称密钥传输给服务端,服务端使用私钥解密得到对称密钥 X,之后的内容都使用这个对称密钥 X 加密,这样就只需要使用一次非对称加密,接下来都使用对称加密。
缺点:中间人攻击,中间人先劫持服务端发给客户端的公钥替换为假公钥,客户端使用假公钥将对称加密密钥 X 加密,传输给服务端,中间人再使用假私钥解密得到对称加密密钥 X,再使用真公钥加密对称密钥 X,服务端接收到后使用私钥解密得到对称密钥 X,这样中间人就悄无声息的拿到了对称密钥 X。

数字证书

关键点:客户端得确定自己拿到的公钥是否确定是服务端发送的,而不是中间人篡改过的,于是就有了数字证书。
数字证书:由 CA 机构颁发,服务器将数字证书传输给浏览器,浏览器从中取得公钥即可。

数字签名

根据证书内容生成一份“签名”,客户端对比证书内容和签名是否一致就能知道是否被篡改。

数字签名的制作过程

由于 CA 拥有非对称加密的公钥与私钥,CA 对证书的明文内容进行 hash(提高性能,因为明文内容较长,hash 之后能得到固定长度的信息),再用私钥对其进行加密,得到数字签名,所以传输的是数字签名和 hash 过的明文数字证书,所以即使中间人拦截修改了证书原文,但是他没有 CA 的私钥,无法修改签名,客户端拿到数据后(由于是浏览器信任的机构,所以浏览器保有它的公钥),公钥解密签名会发现与证书明文不一致,发现被篡改。

中间人能否将整个证书调包?

不能被篡改也不可能将整个证书掉包,因为证书里包含了目标网站的信息,包括域名,浏览器拿到证书中的域名与自己要请求的域名做一下对比就知道有无被调包了。

https需要每次请求前都进行 SSL/TLS 握手传输密钥吗?

https不需要每次请求前都进行 SSL/TLS 握手传输密钥,因为此过程很耗时,故服务器会为每个客户端都维护 sessionID,SSL 握手阶段完毕后,浏览器生成好密钥传输给服务器后,服务器会将密钥保存在 session中,之后每次浏览器请求时都带上 sessionID,服务端会根据 sessionID 找到对应的密钥进行加密解密操作。

猜你喜欢

转载自blog.csdn.net/xiaoguoyangguang/article/details/119218877