加密和API保護:TLS,HSTS,PFS,保密輪換
1)威脅圖片和目標
MitM攻擊下的API,交通攔截,下行攻擊,偽造令牌,泄露密鑰和濫用長壽秘密。保護目標:- 隱私和完整性(TLS 1.3+強密碼)。
- Downgrade/Stripping防護(HSTS,禁止版本/密碼)。
- 盡量減少損害損害(PFS,短TTL,快速旋轉)。
- 可靠的客戶端/服務身份驗證(mTLS/令牌)和跟蹤性。
2) TLS作為基礎(服務器和服務臺服務)
版本和密碼:- 默認情況下為TLS 1。3;允許TLS 1。2僅用於兼容性。禁用1。1/1.0.
- TLS 1優先密碼。3:
- `TLS_AES_128_GCM_SHA256`, `TLS_AES_256_GCM_SHA384`, `TLS_CHACHA20_POLY1305_SHA256`.
- 對於TLS 1。2:只有ECDHE與AES-GCM/ChaCha20和ECDSA/RSA簽名(例如「ECDHE-ECDSA-AES 128-GCM-SHA 256」)。
- 服務器密鑰:ECDSA P-256/P-384(更快、更短)或RSA 2048+/3072。
- mTLS的客戶端密鑰:ECDSA P-256;通過自己的CA或收費的HSM/KMS發行。
- 包括OCSP stapling,最好帶有Must-Staple標誌和ALPN(HTTP/2/3)。
PFS (Perfect Forward Secrecy):
由臨時交換(ECDHE)提供-即使服務器密鑰是鴨子,過去的會話也不會解密。
強制禁用靜態DH/RSA關鍵協議。
現代補充:- 如果前端/CDN支持ECH(加密客戶端您好),則隱藏SNI。
- 僅使用強密碼HTTP/2/3;禁止未受保護的HTTP,對HTTPS進行重復。
3) HSTS vs TLS條紋
在根域和子域上啟用HTTP Strict Transport Security:
Strict-Transport-Security: max-age=63072000;includeSubDomains;preload將域放在HSTS前端列表中。
在發布前註意正確性(回滾很困難)。
4)相互身份驗證: mTLS和/或令牌
微服務/內部API之間的mTLS:雙向證書,通過服務主機(Istio/Linkerd)或本機PKI自動輪換。
API客戶端(移動/合作夥伴集成):令牌(OAuth2/OIDC,JWT),可選的高風險的mTLS。
對於公共領域:TLS+與設備/DPoP綁定的短壽命OAuth2/OIDC令牌。
5)證書和生命周期管理
ACME自動化(例如Let's Encrypt/Organization CA),在到期前30天自動更新。
證書壽命短(≤ 90天)+監視截止日期,Alerta和金絲雀派遣包。
集中式PKI:根/中級CA,CRL/OCSP,發行和召回審核。
Nginx示例(片段):nginx ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256;
ssl_prefer_server_ciphers on;
ssl_ecdh_curve X25519:P-256:P-384;
ssl_stapling on;ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=63072000;includeSubDomains;preload" always;6)秘密輪換: 原則和模式
旋轉目標:限制泄漏的「爆炸半徑」,減少濫用時間,確保無縫發布。
基本規則:- 僅在秘密管理器中存儲秘密(KMS/Vault/Cloud SM)。Git/圖像中沒有秘密。
- 短的TTL和自動旋轉:簽名密鑰,DB密碼,提供商API密鑰。
- 雙重發布(雙鍵窗口):舊鍵和新鍵同時處於活動狀態。
- 轉化+kid(用於JWT/JWKS),用於驗證舊令牌的「grace」窗口。
- JWT密鑰(簽名/加密),HMAC秘密網絡手冊和呼號,DB密碼/計數,高速緩存信條(Redis),CI/CD代幣,提供商秘密(KYC/AML,收費,SMS/e-mail),SSH自動化密鑰。
計劃外輪換的觸發因素:懷疑泄漏,解雇員工,改變供應商,監管機構的要求。
7) JWT/JWKS: 安全角色扮演
用當前和未來的密鑰發布JWKS endpoint(「kid」是必需的)。
輪換程序:1.生成新密鑰→添加到JWKS中為「第二個」。
2.更新簽名者→新密鑰發布新令牌。
3.等待舊令牌的TTL →從JWKS中刪除舊密鑰。
安裝短的TTL令牌(例如5-15分鐘)+refresh流並進行額外的驗證。
8)實踐中的秘密管理
KMS+envelope加密:HSM/KMS中的主鍵,數據被「包裹」DEK加密。
Vault/Cloud Secret Manager: DB的動態信用額(使用TTL進行計算)、周期輪換。
Kubernetes: External Secrets/Secrets Store CSI;etcd加密;RBAC;禁止偽造秘密。
按角色訪問:IAM/ABAC,最小特權原則,硬件邊界(HSM,TPM)。
全面審計:誰,什麼時候,為什麼要閱讀/修改。
9)周邊內部的運輸保護
不要相信「內部網絡」:到處都是TLS/mTLS(零信任)。
Service mesh自動化證書,重新啟動和輪換,觀察性(默認為mTLS)。
最小化TLS終端:僅限於edge+加密的東西方或端到端加密。
10) TLS之上的API安全策略
Rate 限制/DoS保護,webhook簽名驗證(HMAC帶秘密輪換)。
Content-Security-Policy/Referrer-Policy/X-Content-Type-Options для фронта.
MTLS用於關鍵端點(付款,管理),IP allow-list合作夥伴。
Replay protection: timestamp+ nonce在已簽名的請求中,窗口不超過5分鐘。
11)監控和測試
TLS可觀察性:度量標準中的版本/密碼,下行嘗試的差異,握手故障的增加。
掃描儀(以CI/CD和定期銷售):驗證支持的密碼、證書、HSTS、OCSP。
Chaos/DR演習:證書到期,秘密管理器下降,簽名密鑰受到損害-檢查反應計劃。
12)應對程序
密鑰損害:立即撤銷證書/從JWKS中刪除密鑰,反向備份,強制令牌再生。
未續簽到期:臨時降級(僅限內部流量),自動重新安裝證書。
事件報告:時間線,受影響的實體,技術。細節、糾正措施。
13)快速檢查清單(prod-ready)
- 僅TLS 1。3 (+ 1.2用於legasi),嚴格的密碼列表。
[] HSTS с `preload`, OCSP stapling, ALPN.- ECDHE for PFS;ECDSA P-256/384或RSA 3072。
- 集群內/關鍵服務之間的mTLS。
- JWKS+kid,TTL代幣短,輪換計劃。
- 保密-僅在KMS/Vault中,DB/提供商的自動旋轉。
- 自動證書更新(ACME),在30天內完成。
- CI/CD驗證安全標題和易受攻擊的密碼。
- 記錄的運行手冊"和:輪換,召回,事件。
二.總結
可靠的API保護是TLS 1的組合。3+HSTS+PFS是密鑰和秘密管理的強制性最小值和成熟過程。在服務之間添加mTLS,通過KMS/Vault/mesh自動發布/輪換,在更換密鑰時保持短的TTL和「雙窗口」-並且在不破壞產品可用性和速度的情況下最大程度地減少攔截,下行和濫用機密的風險。
