| 2025-03-16
HTTPS(Hypertext Transfer Protocol Secure),即超文本传输安全协议,它是在 HTTP 协议基础上加入 SSL/TLS 加密协议,以确保数据在传输过程中的保密性、完整性和身份认证,为用户在网络上的信息交互提供安全保障。
当用户在浏览器地址栏输入一个 HTTPS 网址并回车后,整个通信流程便正式开启。首先是客户端与服务器的初始连接阶段。客户端向服务器发送一个 “ClientHello” 消息,这个消息中包含了客户端支持的 SSL/TLS 协议版本、加密算法套件列表、一个随机数(Client Random)等信息。服务器接收到 “ClientHello” 后,会从中选择一个双方都支持的 SSL/TLS 协议版本和加密算法,同时也生成一个随机数(Server Random),然后将这些信息通过 “ServerHello” 消息回传给客户端。
紧接着进入密钥交换阶段。若服务器选择的加密算法需要证书认证(这是常见情况),服务器会把自己的数字证书发送给客户端。该数字证书由受信任的证书颁发机构(CA)签发,包含了服务器的公钥、证书有效期、证书所有者等信息。客户端收到证书后,会先验证证书的合法性,比如检查证书是否过期、证书的签名是否有效等。如果证书验证通过,客户端会从证书中提取出服务器的公钥。之后,客户端生成一个用于本次会话的随机密钥(Pre - Master Secret),并用服务器的公钥对其进行加密,然后将加密后的 Pre - Master Secret 发送给服务器。服务器使用自己的私钥解密,得到 Pre - Master Secret。至此,客户端和服务器双方都拥有了 Client Random、Server Random 和 Pre - Master Secret 这三个关键信息。通过一系列特定的算法,双方基于这三个信息生成会话密钥(Session Key),这个会话密钥将用于后续的数据加密传输。
在数据传输阶段,客户端和服务器使用生成的会话密钥对要传输的数据进行加密和解密。当客户端有数据要发送给服务器时,会使用会话密钥对数据进行加密,然后将加密后的数据发送出去。服务器接收到加密数据后,使用相同的会话密钥进行解密,获取原始数据。反之,服务器向客户端发送数据时也是同样的流程。这样,即使数据在传输过程中被第三方截获,由于没有正确的会话密钥,第三方也无法解密获取真实数据,从而保证了数据的保密性。同时,为了确保数据的完整性,在数据传输过程中还会使用消息认证码(MAC,Message Authentication Code)技术。发送方在发送数据时,会根据数据内容和会话密钥生成一个 MAC 值,并将其与加密后的数据一起发送。接收方收到数据后,会使用相同的算法和会话密钥重新计算 MAC 值,并与接收到的 MAC 值进行比对。如果两者一致,则说明数据在传输过程中没有被篡改,保证了数据的完整性。
当数据传输完成后,客户端和服务器会进行连接关闭操作。客户端发送一个 “FIN” 消息给服务器,表示要关闭连接。服务器收到 “FIN” 后,会返回一个 “ACK” 确认消息给客户端,同时也发送一个 “FIN” 消息给客户端。客户端收到服务器的 “FIN” 后,再返回一个 “ACK” 确认消息给服务器,至此,双方的连接正式关闭 。
在整个 HTTPS 工作过程中,证书颁发机构(CA)起着至关重要的作用。CA 负责对服务器的身份进行验证,并为其颁发数字证书。只有经过 CA 认证的服务器证书,客户端才会信任。如果服务器使用的是自签名证书(未经过 CA 认证),客户端在访问时通常会收到安全警告,因为无法确认该服务器的真实身份,存在安全风险。
1、 HTTPS 与 HTTP 的性能差异:HTTPS 由于增加了加密和解密过程,相比 HTTP 会消耗更多的 CPU 和内存资源,导致数据传输速度略慢。但随着硬件性能提升和优化算法的出现,这种性能差异在逐渐缩小。在实际应用中,安全的重要性往往高于这部分性能损失。
2、 证书链验证:数字证书可能存在证书链,即服务器证书由中间证书颁发机构签名,而中间证书颁发机构的证书又由根证书颁发机构签名。客户端验证证书时,需要从服务器证书开始,沿着证书链向上验证,直到根证书。只有当整个证书链验证通过,客户端才会信任服务器证书。
3、 HTTPS 的安全漏洞与防范:虽然 HTTPS 相对安全,但也存在安全漏洞,如 SSL 剥离攻击、证书伪造等。为防范这些漏洞,要及时更新 SSL/TLS 协议版本,使用强加密算法,选择可靠的证书颁发机构,定期检查证书状态等。