HTTPS(HyperText Transfer Protocol Secure)通过多种技术手段实现数据传输的安全性,其核心机制基于SSL/TLS协议,并结合数字证书、加密算法等技术。
SSL:Secure Sockets Layer,安全套接字层
TLS:Transport Layer Security,传输层安全性协议
一、证书验证机制
1. 数字证书与CA(Certificate Authority,证书授权)认证
- 服务器需通过受信任的证书颁发机构(CA)申请数字证书,证书包含
服务器公钥、域名信息及CA的数字签名
。客户端验证证书的合法性(如有效期、域名匹配、CA链完整性),确保通信对象身份可信。 - 扩展验证(EV)证书:提供更高级别的身份验证,如企业营业执照信息,增强用户信任感。
2. 证书链验证
- 客户端通过验证证书的完整信任链(从根证书到中间证书再到服务器证书),防止中间人攻击中伪造的证书被接受。
二、加密算法组合
1. 非对称加密(密钥交换)
- 握手阶段使用RSA、ECDHE等非对称算法加密对称密钥(如AES密钥),解决密钥传输的安全问题。
- 前向保密(Perfect Forward Secrecy):通过临时密钥(如DHE/ECDHE)生成会话密钥,即使长期私钥泄露,历史会话数据仍无法被解密。
2. 对称加密(数据传输)
- 会话建立后,使用AES、ChaCha20等对称算法加密数据,兼顾加密效率与安全性。
ChaCha20-Poly1305是Google所采用的一种新式加密算法,性能强大,在CPU为精简指令集的ARM平台上尤为显著。
三、SSL/TLS握手过程的安全设计
1. 握手协议(Handshake Protocol)
- 客户端与服务器协商加密算法、交换公钥、生成会话密钥,确保双方使用相同的加密策略。
- 证书指纹校验:部分场景中,客户端可预存服务器证书指纹,防止中间人替换证书。
2. 防篡改与完整性校验
- 使用MAC(Message authentication code,消息认证码)或HMAC算法验证数据完整性,确保传输内容未被篡改。
- TLS 1.3引入AEAD(认证加密与数据填充)模式,将加密与完整性校验合并,提升效率。
四、协议版本与配置优化
1. TLS协议版本控制
- 优先使用TLS 1.2或TLS 1.3(支持更安全的加密套件和前向保密),禁用SSLv2/v3及弱加密算法(如RC4、MD5)。
- TLS 1.3简化握手流程,减少握手次数,降低中间人攻击风险。
2. 安全配置优化
- HSTS(HTTP Strict Transport Security):强制浏览器仅通过HTTPS访问,防止降级攻击(如HTTP重定向)。
- OCSP Stapling:服务器主动缓存OCSP响应,减少证书吊销状态查询的延迟与隐私泄露风险。
- OCSP(Online Certificate Status Protocol,在线证书状态协议)是维护服务器和其它网络资源安全性的两种普遍模式之一。另一种更老的方法是证书注销列表(CRL)已经被在线证书状态协议取代了很多年了。
- OCSP克服了证书注销列表(CRL)的主要缺陷:必须经常在客户端下载以确保列表的更新。当用户试图访问一个服务器时,在线证书状态协议发送一个对于证书状态信息的请求。服务器回复一个“有效”、“过期”或“未知”的响应。协议规定了服务器和客户端应用程序的通讯语法。在线证书状态协议给了用户的到期的证书一个宽限期,这样他们就可以在更新以前的一段时间内继续访问服务器。
五、防中间人攻击(MITM)措施
1. 证书绑定技术
- 使用DNSSEC或DANE(DNS-Based Authentication of Named Entities)绑定域名与证书,防止DNS劫持导致的证书伪造。
- 证书透明度(Certificate Transparency):公开所有证书颁发记录,便于检测恶意证书。
2. 多因素认证(MFA)
- 在敏感场景中,结合短信、生物识别等多因素验证,增强用户身份认证的安全性。
六、性能与安全平衡
- HTTP/2与TLS 1.3结合:减少握手延迟,支持多路复用和头部压缩,提升加密传输效率。
- 硬件加速:使用SSL卸载卡或支持AES-NI指令集的CPU,优化加密运算性能。
七、浏览器与服务器建立 HTTPS 连接的流程
参与对象:+----------------+ +----------------+| 浏览器 | | 服务器 |+----------------+ +----------------+| || TCP三次握手 | |-----------------------> || | SYN-ACK|<----------------------- || ACK ||------------------------>|| || Client Hello | |------------------------>|| (协议版本、加密套件、Client Random)| | Server Hello|<------------------------|| (协议版本、加密套件、Server Random、证书)| 证书验证 | |------------------------>|| (验证CA链、域名、有效期)| | 证书验证通过|<------------------------|| Client Key Exchange ||------------------------>|| (Pre-Master Secret 加密)| | 生成主密钥|<------------------------|| Change Cipher Spec ||------------------------>|| Change Cipher Spec | |<------------------------|| Finished ||------------------------>|| Finished | |<------------------------|| 加密数据传输 || |
关键步骤说明
- TCP 三次握手
- 浏览器发送
SYN
,服务器回复SYN-ACK
,浏览器确认ACK
,建立 TCP 连接(端口 443)。
- 浏览器发送
- Client Hello
- 浏览器发起 TLS 握手,协商支持的协议版本(如 TLS 1.2)、加密套件(如 AES256-GCM-SHA384)及随机数
Client Random
。
- 浏览器发起 TLS 握手,协商支持的协议版本(如 TLS 1.2)、加密套件(如 AES256-GCM-SHA384)及随机数
- Server Hello
- 服务器响应选定的协议和加密套件,发送随机数
Server Random
和数字证书(含公钥、域名信息、CA 签名)。
- 服务器响应选定的协议和加密套件,发送随机数
- 证书验证
- 浏览器验证证书合法性:
- 检查 CA 链是否可信。
- 确认证书域名与服务器匹配。
- 验证证书未过期且未被吊销(可能通过 OCSP 或 CRL)。
- 浏览器验证证书合法性:
- 密钥交换
- 浏览器生成
Pre-Master Secret
,用服务器公钥加密后发送。 - 服务器解密获取
Pre-Master Secret
。
- 浏览器生成
- 主密钥生成
- 双方通过
Client Random
、Server Random
、Pre-Master Secret
生成相同的主密钥(Master Secret),派生会话密钥。
- 双方通过
- 加密通信启动
- 双方发送
Change Cipher Spec
消息,切换为会话密钥加密。 - 发送
Finished
消息(含握手摘要),验证密钥一致性。
- 双方发送
- 数据传输
- 使用对称加密(如 AES)传输 HTTP 请求/响应,确保数据机密性与完整性。
补充说明
- TLS 1.3 简化版:若使用 TLS 1.3,握手步骤更少(1-RTT 或 0-RTT),且移除弱加密算法(如 RSA 密钥交换)。
0-RTT(Zero Round Trip Time)是一种网络协议优化技术,旨在消除或减少建立安全连接所需的往返延迟,尤其在 TLS 1.3 和 QUIC (Quick UDP Internet Connections, 快速UDP网络连接)协议中广泛应用。
- 证书吊销检查:部分场景中,浏览器会向 OCSP 服务器查询证书状态。
- 前向保密(PFS):若使用 ECDHE 算法,每次会话生成临时密钥,增强安全性。
总结
HTTPS的安全性依赖于证书验证、加密算法组合、协议设计及配置优化的协同作用。实际部署中需定期更新证书、禁用弱加密算法,并结合HSTS、OCSP Stapling等技术增强防护。同时,需关注协议演进(如TLS 1.3)和新型攻击手段(如量子计算威胁),持续优化安全策略。