http + ssl傳輸層 -> https
安全套接層
SSL/TLS
- 1、核心角色與文件
- 2、證書生成流程
- 2.1、生成CA根證書
- 2.2、生成服務端證書
- 2.3 生成客戶端證書(雙向認證)
- 3、SSL/TLS 認證模式
- 3.1、單向認證(默認 HTTPS)
- 3.2、雙向認證(mTLS)
- 4、認證關鍵點
- 5、對稱數據加密
- 算法協商過程
1、核心角色與文件
文件 | 作用 | 歸屬方 |
---|---|---|
ca.key | CA 根私鑰,用于簽發證書 | 證書頒發機構 (CA) |
ca.crt | CA 根證書,用于驗證簽發證書的合法性 | 客戶端/服務端 |
server.key | 服務端私鑰,用于 SSL 握手簽名 | 服務端 |
server.crt | 服務端證書(由 CA 簽發),包含公鑰+身份信息 | 服務端 |
client.key | 客戶端私鑰(雙向認證時使用) | 客戶端 |
client.crt | 客戶端證書(由 CA 簽發) | 客戶端 |
2、證書生成流程
2.1、生成CA根證書
# 生成 CA 私鑰openssl genrsa -out ca.key 2048# 生成 CA 自簽名根證書openssl req -x509 -new -nodes -key ca.key -days 3650 -out ca.crt -subj "/CN=MyRootCA"
2.2、生成服務端證書
服務端證書 (server.crt) 必須由客戶端信任的 CA(即 ca.crt)簽發。
# 生成服務端私鑰openssl genrsa -out server.key 2048# 生成證書請求文件 (CSR)openssl req -new -key server.key -out server.csr -subj "/CN=www.example.com"# 用 CA 簽發證書openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365
2.3 生成客戶端證書(雙向認證)
雙向認證時,客戶端證書 (client.crt) 必須由服務端信任的 CA 簽發(通常也是 ca.crt)。
# 生成客戶端私鑰openssl genrsa -out client.key 2048# 生成證書請求openssl req -new -key client.key -out client.csr -subj "/CN=ClientUser"# 用 CA 簽發證書openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365
3、SSL/TLS 認證模式
證書驗證本質是校驗簽發鏈是否通向信任的 CA。
3.1、單向認證(默認 HTTPS)
-
流程:
- 1、客戶端驗證服務端證書:
- 校驗 server.crt是否由 ca.crt簽發。
- 驗證域名、有效期等。
- 2、服務端不驗證客戶端身份。
- 1、客戶端驗證服務端證書:
-
配置:
- 服務端 nginx
# Nginx 配置示例# 自身認證ssl_certificate server.crt;# 加密數據ssl_certificate_key server.key;
- 客戶端
- 需預裝 ca.crt(否則瀏覽器會提示證書不受信)
3.2、雙向認證(mTLS)
-
雙向認證需要雙方都配置信任鏈和證書。
-
流程:
1、客戶端驗證服務端證書(同單向認證)。
2、服務端驗證客戶端證書:- 校驗 client.crt 是否由 ca.crt 簽發。
- 可選校驗客戶端證書的擴展字段(如用途)。
-
配置:
1、服務端 nginxssl_verify_client on; # 開啟客戶端驗證ssl_client_certificate ca.crt; # 信任的 CA 證書
2、客戶端
- 請求時需攜帶 client.crt 和 client.key。
curl --cert client.crt --key client.key https://www.example.com
4、認證關鍵點
- 非對稱加密僅用于身份認證和密鑰交換:
服務端用 server.key 對握手消息簽名,客戶端用 server.crt 中的公鑰驗證簽名。
雙方協商出對稱密鑰(如 AES),后續通信使用對稱加密。 - 數據加密由對稱密鑰完成,非對稱加密不直接加密業務數據。
5、對稱數據加密
算法協商過程
- ClientHello:客戶端發送支持的密碼套件列表
- ServerHello:服務器從客戶端支持的列表中選擇一個雙方都支持的密碼套件
- 密鑰交換:通過非對稱加密(RSA、ECSHE)協商出預主密鑰(Pre-Master
Secret),最終生成會話密鑰(Session Key).- 特性:
- 密鑰保密性:
- 會話密鑰動態生成:每次 TLS連接都會生成唯一的會話密鑰,僅在內存中存在,不會通過網絡傳輸。
- 密鑰交換安全性:
非對稱加密(RSA、ECDHE)保護預主密鑰的傳輸。
前向保密(Prefect Forward Secrecy,PFS):使用ECDHE等算法時,每次會話的臨時密鑰在連接結束后銷毀,即使服務器私鑰泄露,歷史會話也無法解密。
- 加密算法的強度:
- AES安全性:AES是 NIST認證的對稱加密算法,目前無已知有效攻擊手段。
- 加密模式優化:現代 TLS適用 AES-GCM等認證加密模式,同時保證機密性和完整性。
- 協議防護機制:
- 防重放攻擊:通過隨機數和序列號確保數據包不被重復使用
- 完整性校驗:HMAC或 AEAD(如 GCM)防止數據被篡改
- 密鑰保密性:
- 特性: