HTTPS(HyperText Transfer Protocol Secure)是 HTTP 的安全版本,它通过 SSL/TLS 协议来加密数据传输,确保数据在客户端和服务器之间传输时的安全性。
SSL(Secure Sockets Layer)是一种安全协议,用于在互联网上保护数据的传输安全。它工作在传输层,主要功能是通过加密技术,保护不同计算机之间的数据传输过程,防止敏感数据被黑客窃取和篡改。SSL 协议可以用于保护网站的用户登录、信用卡支付、网上银行等敏感信息的传输,以及企业之间的机密数据的传输。SSL 协议目前已经被继承为 TLS(Transport Layer Security),是一种安全性更高的传输层协议。
HTTPS 原理
服务器的公钥和私钥
为实现安全的数据传输,使用非对称加密方法,服务器需要提前准备好 公钥和私钥。
公钥和私钥都可以用来加密解密,但公钥加密后只能用私钥解密,反过来,私钥加密后也只能用公钥解密。
服务器将私钥保存在本地,将公钥发送给客户端,这样客户端加密的内容只有服务端能够解密。这样保证了客户端发给服务器的内容不会被窃取。
会话密钥
为了保证服务器发送给客户端的内容不会被窃取,需要使用对称加密的会话密钥。
为什么不使用非对称加密?因为非对称加密非常耗时。
客户端会随机生成 会话密钥,使用服务器的公钥加密后发送给服务器,服务器使用私钥解密。这个会话密钥只有客户端和服务器知道。
之后的通信均使用会话密钥进行对称加密。
数字证书
中间人攻击:如果服务端发送公钥给客户端的过程被中间人劫持,客户端收到的不是服务端的公钥,而是中间人的公钥,那么客户端发送的会话密钥就会被中间人获取,导致后续的通信都是不安全的。
为了防止中间人攻击,需要 CA 机构颁发 数字证书,证明公钥是属于该网站的。
数字证书使用 数字签名 保证证书内容没有遭到篡改。
客户端与服务器通信过程
1. 客户端发起 HTTPS 请求
用户在浏览器中输入 HTTPS URL,浏览器会向服务器发起 HTTPS 请求。
2. 服务器返回证书
服务器收到请求后,会返回一个包含公钥的数字证书。这个证书由受信任的证书颁发机构(CA)签发,包含服务器的公钥和其他信息。
3. 客户端验证证书
浏览器验证服务器返回的证书是否合法。验证过程包括:
- 检查证书是否由受信任的 CA 签发。
- 检查证书是否在有效期内。
- 检查证书的域名是否与请求的域名匹配。
如果证书验证失败,浏览器会显示警告信息,提示用户连接不安全。
4. 生成会话密钥
如果证书验证成功,浏览器会生成一个随机的 会话密钥(对称密钥),并使用服务器的公钥对会话密钥进行加密,然后将加密后的会话密钥发送给服务器。
5. 服务器解密会话密钥
服务器使用自己的私钥解密会话密钥。此时,客户端和服务器都拥有了相同的会话密钥。
6. 加密通信
客户端和服务器使用会话密钥对后续的通信进行加密。会话密钥是对称加密密钥,使用对称加密算法(如 AES)进行数据加密和解密。
7. 数据传输
客户端和服务器之间的所有数据传输都使用会话密钥进行加密,确保数据在传输过程中不会被窃听或篡改。