前言 :
我们知道 HTTP 协议是明文传输,在早期只展示静态内容时没问题。随着互联网的快速发展,人们对于 网络传输安全性 的要求也越来越 高,HTTPS 协议 因此出现。
- HTTPS 协议 ?
HTTPS:
- 超文本传输安全协议,是以安全为目标的 HTTP 通道,可以理解为 HTTP 的安全版。
- 采用对称加密和非对称加密结合的方式来保护浏览器和服务器之间的通信安全。
- 对称加密算法加密数据+非对称加密算法交换密钥+数字证书验证身份 = 安全。
- HTTPS 其实由两部分组成:HTTP + SSL / TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。服务器和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。
- HTTPS 协议通道 ?
HTTP协议通道:传统的 HTTP 报文是直接将报文信息传输到 TCP 然后 TCP 再通过 TCP 套接字发送给目的主机上。
HTTPS协议通道:HTTPS 是 HTTP 报文直接将报文信息传输给 SSL 套接字 进行加密,SSL 加密后将加密的报文发送给TCP 套接字,然后 TCP 套接字再将加密后的报文发送给目的主机,目的主机将通过 TCP 套接字获取加密后的报文给 SSL 套接字,SSL 解密给对应进程。
- HTTPS 加密握手过程 ?
- 浏览器端 ===> 发送请求网址 ===> 服务器端。
- 服务器端 ===> 生成证书公钥,证书密钥。
- 服务器端 ===> 返回证书公钥 ===> 浏览器端。
- 浏览器端 ===> 验证证书是否有效,有效则生成一个随机值,用证书的公钥加密随机值。
- 浏览器端 ===> 将加密后的密钥发送 ===> 服务器端。
- 服务器端 ===> 用私钥解密密钥。
- 服务器端 ===> 用密钥加密要发送的内容。
- 服务器端 ===> 将加密后的内容发送 ===> 浏览器端。
- 浏览器端 ===> 用密钥解密内容信息。
- 如何实现加密 ?
前提:TLS 是基于 TCP 协议之上的。
- 浏览器端 ===> TLS 版本号+所支持加密套件列表+希望使用的 TLS 选项 ===> 服务器端。
- 浏览器端 ===> 选择一个客户端的加密套件+自己的公钥+自己的证书+希望使用的 TLS 选项+(要求客户端证书) ===> 服务器端。
- 浏览器端 ===> 自己的证书+使用服务器公钥和协商的加密套件加密一个对称密钥(自己生成一个随机数) ===> 服务器端。
- 浏览器端 ===> 使用私钥解密出堆成密钥(随机数)后,发送加密的 finish 消息,表示握手完成 ===> 服务器端。
- 加密分类 ?
对称加密:采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥加密,也就是密钥也可以做解密密钥,这种方法在密码学中叫做对称加密算法。
非对称加密:需要两个密钥:公钥和私钥。公钥与私钥是一对,如果用公钥对数据加密,只能用私钥解密;如果用私钥对数据加密,只能用公钥解密。
二者对比:
- 对称密钥只需要一把密钥,非对称加密需要两把密钥(公钥和私钥)。
- 对称加密算法简单,加密解密容易,效率高,执行快;只有一把钥匙,密文如果被拦截,且密钥也被劫持,信息很容易被破译,安全性低。非对称加密算法效率很低,安全性高。
总结:非对称可靠但慢,对称高效不可靠。组合使用,非对称加密进行身份验证和密钥交换,对称加密进行数据的加密。