目录
一、https
1. HTTPS的核心目标
-
数据加密:防止第三方窃听或篡改通信内容。
-
身份认证:通过数字证书验证服务器身份,防止中间人攻击。
-
数据完整性:确保数据在传输过程中未被修改。
2. HTTPS vs HTTP
特性 | HTTP | HTTPS |
---|---|---|
协议 | 明文传输,无加密 | 加密传输(SSL/TLS) |
端口 | 80 | 443 |
安全性 | 易受窃听、篡改、中间人攻击 | 加密、身份认证、数据完整性保护 |
性能 | 无加密开销,速度更快 | 因加密/解密略慢,但现代优化已大幅降低影响 |
3. SSL/TLS协议
HTTPS的安全基础是SSL(Secure Sockets Layer) 或 TLS(Transport Layer Security) 协议(TLS是SSL的升级版,现主要使用TLS 1.2/1.3)。
TLS握手流程(以RSA密钥交换为例)
-
Client Hello
-
客户端发送支持的TLS版本、加密套件列表、随机数(Client Random)。
-
-
Server Hello
-
服务端选择TLS版本、加密套件,发送随机数(Server Random)和数字证书。
-
-
证书验证
-
客户端验证证书合法性(是否由可信CA签发,域名是否匹配,是否过期等)。
-
-
密钥交换
-
客户端生成预主密钥(Pre-Master Secret),用证书公钥加密后发送给服务端。
-
-
生成会话密钥
-
双方通过Client Random、Server Random和Pre-Master Secret生成对称密钥(Session Key)。
-
-
加密通信
-
后续数据传输使用Session Key进行对称加密(如AES)。
-
TLS 1.3优化:简化握手流程,支持0-RTT(零往返时间),减少延迟。
4. 数字证书与CA
-
数字证书:包含服务器公钥、域名、签发机构(CA)、有效期等信息。
-
CA(Certificate Authority):受信任的第三方机构(如Let's Encrypt、DigiCert),负责验证服务器身份并签发证书。
-
证书链:根CA → 中间CA → 服务器证书,浏览器通过预置的根证书信任链验证合法性。
-
自签名证书:未通过CA签发,浏览器会提示不安全,仅用于测试或内部环境。
5. 加密技术
-
对称加密(如AES、ChaCha20):加密和解密使用同一密钥,速度快,用于传输数据。
-
非对称加密(如RSA、ECC):公钥加密、私钥解密,用于密钥交换和身份认证。
-
哈希算法(如SHA-256):确保数据完整性,防止篡改。
6. HTTPS性能优化
-
会话恢复(Session Resumption):通过Session ID或Session Ticket复用之前协商的密钥,减少握手开销。
-
OCSP Stapling:服务端主动提供证书状态信息,避免客户端查询OCSP服务器。
-
TLS 1.3:减少握手步骤,支持更高效的加密算法。
-
HSTS(HTTP Strict Transport Security):强制浏览器使用HTTPS,避免降级攻击。
7. 常见问题
-
混合内容(Mixed Content):HTTPS页面中加载HTTP资源(如图片、脚本),浏览器会阻止或警告。
-
证书过期:需定期更新证书(自动化工具如Certbot可解决)。
-
中间人攻击:伪造证书或CA可能被利用,需确保证书链完整可信。
8. 配置最佳实践
-
使用TLS 1.2/1.3,禁用不安全的协议(如SSLv3、TLS 1.0/1.1)。
-
选择强加密套件(如
ECDHE-ECDSA-AES128-GCM-SHA256
)。 -
启用HTTP到HTTPS的自动重定向(301/302)。
-
配置HSTS头(
Strict-Transport-Security: max-age=31536000; includeSubDomains
)。 -
定期更新证书,推荐自动化工具(如Let's Encrypt)。
9. 未来趋势
-
TLS 1.3普及:更安全、更高效。
-
量子安全加密:应对量子计算机威胁的新算法(如抗量子加密算法)。
-
Certificate Transparency:增强证书签发透明度,防止恶意证书。
二、加密过程
1. 总体流程概览
HTTPS 加密分为两个阶段:
-
TLS 握手阶段:通过非对称加密交换密钥,验证身份。
-
数据传输阶段:使用对称加密密钥加密通信内容。
2. TLS 握手阶段(密钥协商)
步骤 1:Client Hello
-
客户端向服务端发送以下信息:
-
支持的 TLS 版本(如 TLS 1.2/1.3&
-