加密和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和"双窗口"-并且在不破坏产品可用性和速度的情况下最大程度地减少拦截,下行和滥用机密的风险。
