最近花了好长时间才搞懂https,所以写了该博文进行总结。许多细节之处,还有待完善,如有错误,欢迎大家在评论区批评指正。
1 区别
(1)http是明文传输的,数据都是未加密的,安全性较差。https(SSL/TLS+http)数据传输过程是加密的,安全性较好。
(2)使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
(3)HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,而 HTTPS除了 TCP,还要加上 ssl 握手。
(4)http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
(5)HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源
2 http问题
-
明文传输
-
不会验证对方身份
-
无法保证数据的完整性和安全性
3 对称加密和非对称加密
对称加密用的同一个密钥。非对称加密有两个密钥,一个公钥,一个私钥。
在https的过程中,使用了两次非对称加密
-
CA对服务器公钥以及其他新的信息使用私钥加密,形成数字签名(证书),服务器发送给客户端以后。CA用公钥进行解密,得到服务器的公钥。
-
客户端将会话密钥 使用服务器的公钥,加密以后,发送给服务器,服务器使用自己的私钥对数据进行解密,得到会话密钥。
之后的通信就是使用会话密钥来进行通话的。会话密钥的通信就是对称加密
4 https
https是使用ssl+http来进行数据传输的。
首先建立ssl连接。(前提:服务器向CA申请证书。并把自己的公钥给CA,CA将服务器的公钥以及一些其他信息使用CA的私钥进行加密,生成数组签名(证书))
(1)首先客户端向服务器发送请求。(包含随机数、TLS版本号、)
(2)服务器向客户端发送自己的证书。(包含随机数、确认TLS版本号)
(3)客户端使用内CA的公钥(CA的公钥已经事先置入到了浏览器或操作系统中)进行解密,并且取出服务器的公钥。
(4)客户端使用 客户端生成的随机数以及服务器生成的随机数,以及pre-master生成会话秘钥。
(5)客户端使用服务器的公钥 对会话秘钥进行加密,并发送给客户端
(6)服务器收到 以后,用自己的私钥对信息进行解密,得到会话秘钥
(7)在后续传输内容的过程中,就可以使用对称秘钥来对数据进行加密。保证了数据的安全性。