加密
HTTPS在HTTP基础上增加了加密层,确保数据传输安全。其核心在于通过密钥对数据进行加解密处理。
数据加密机制
客户端与服务端之间通过共享密钥实现加解密,这就是对称加密,而共享的密钥称为会话密钥。
因此,HTTPS对传输数据采用对称加密方式。
关键问题在于:如何安全交换会话密钥? 如果密钥交换过程被窃听,整个加密体系将失效。
这时就需要引入非对称加密机制。公钥用于加密数据,私钥用于解密数据。客户端使用服务端公钥加密会话密钥后传输,服务端再用私钥解密获取密钥。
密钥交换流程简化如下:
- 客户端发起连接请求
- 服务端返回公钥
- 客户端使用公钥加密会话密钥并发送
- 服务端使用私钥解密获取会话密钥
需要注意的是,实际交换的是"预主密钥",最终会话密钥由预主密钥和随机数通过算法计算得出。
加密过程包含两个关键环节:
只要服务端妥善保管私钥,即使中间人截获数据也无法解密。
证书
服务器身份验证
仅靠加密还不够,必须确保连接的是合法服务器。如果客户端被诱导连接恶意服务器,加密将失去意义。
HTTPS通过数字证书解决身份验证问题。证书由权威机构颁发,与服务器域名绑定。建立连接时,服务器需向客户端出示证书。
证书验证机制
浏览器通过证书链验证证书真实性。证书链包含:服务器证书 → 中间证书 → 根证书。
验证过程基于数字签名技术:
- 从服务器证书提取签名信息,使用上级证书公钥解密得到哈希值H2
- 对服务器证书计算哈希值H1
- 对比H1与H2,若相等则证书有效
- 逐级验证直至根证书
根证书内置于操作系统和浏览器,验证过程无需网络请求。
证书验证还包括域名匹配、有效期检查等。任何一项验证失败,连接都会立即终止。
数字签名在HTTPS中主要有两个应用场景:
- 数据加密:公钥加密,私钥解密
- 身份验证:私钥签名,公钥验证
证书相当于服务器的数字身份证,向客户端证明其合法身份。
加密优化
传统加密方式存在前向保密隐患。如果服务器私钥泄露,历史会话密钥可能被破解。
TLS 1.3通过临时密钥对解决这个问题:
- 客户端生成临时密钥对,发送公钥至服务器
- 服务器生成临时密钥对,返回公钥至客户端
- 双方通过椭圆曲线算法计算共享密钥
- 基于共享密钥生成最终会话密钥
核心改进:
- 服务器长期密钥不再参与加密过程
- 握手流程从3次缩减为2次
- 临时密钥在会话结束后立即销毁
即使长期私钥泄露,历史会话仍保持安全,因为破解需要获取已销毁的临时私钥。
总结
HTTPS = HTTP + TLS,当前主流采用TLS 1.3,具备两大核心功能:
证书验证
加密传输
- 基于椭圆曲线的临时密钥交换
- 会话密钥实现数据加解密
加密保障数据传输安全,证书确保连接对象可信。
|