用户要强化SSL证书安全的核心在于:禁用已存在已知漏洞的旧协议(如TLS 1.0/1.1)和不安全的加密套件(如使用CBC模式、弱哈希算法或静态RSA密钥交换的套件),并强制使用现代、强壮的配置。下面说一下针对不同场景的操作指南和最佳实践展示。
一、安全配置核心原则
在修改前,请遵循以下原则:
优先级顺序:协议 > 加密套件。先确保只启用安全协议(如TLS 1.2/1.3),再精细调整套件。
兼容性平衡:禁用旧协议可能会影响老旧客户端(如旧版浏览器、APP)。需根据你的用户群体评估。
统一管理:在网关或负载均衡器层面集中配置,而非每个后端应用单独处理。
二、Nginx (及Kubernetes Nginx Ingress) 配置
这是最常见的场景。安全配置主要通过 ssl_protocols 和 ssl_ciphers 指令实现。
1. 现代安全配置 (推荐)
此配置兼容绝大多数现代浏览器和设备(约2018年后),并启用TLS 1.3。
nginx
1. 只启用安全的协议
ssl_protocols TLSv1.2 TLSv1.3;
2. 配置强加密套件
优先使用TLS 1.3的套件(由协议本身决定,无需显式列出)
为TLS 1.2配置的套件:优先使用ECDHE密钥交换和AES-GCM加密
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
3. 关键优化参数
ssl_prefer_server_ciphers on; 优先使用服务器端提供的套件顺序
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
2. 在Kubernetes Nginx Ingress中配置
通过Ingress Controller的ConfigMap应用全局配置,或通过Annotation为特定Ingress配置。
方式一:全局配置(修改ConfigMap)
yaml
修改 nginx-ingress-controller 的 ConfigMap (通常名为 `nginx-configuration`)
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-configuration
namespace: ingress-nginx
data:
ssl-protocols: "TLSv1.2 TLSv1.3"
ssl-ciphers: "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384"
方式二:特定Ingress注解(覆盖全局)
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-secure-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-protocols: "TLSv1.2 TLSv1.3"
nginx.ingress.kubernetes.io/ssl-ciphers: "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384"
spec:
...
三、Traefik配置
在Traefik的静态配置(如 traefik.yaml 或CLI参数)中定义TLS选项。
1. 定义安全TLS选项
yaml
traefik.yaml (静态配置)
tls:
options:
default:
minVersion: VersionTLS12 最小TLS版本
cipherSuites:
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
sniStrict: true 严格SNI检查
2. 在Kubernetes IngressRoute (Traefik CRD) 中引用
yaml
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: app-route
spec:
entryPoints:
- websecure
routes:
...
tls:
options:
name: default 引用上面定义的default选项
secretName: myapp-tls-secret
四、公有云负载均衡器配置
各大云厂商都提供了类似的配置界面。
云服务商 服务名称 关键配置位置
阿里云 应用型负载均衡(ALB/CLB) 监听配置 -> SSL安全策略(如 tls_cipher_policy_1_2_strict)
腾讯云 应用型负载均衡(CLB) 监听器管理 -> 安全策略(如 ELBSecurityPolicy-1-2-2023-12)
华为云 弹性负载均衡(ELB) 监听器 -> 高级配置 -> TLS安全策略(如 tls-1-2-strict)
AWS Application Load Balancer 监听器 -> 安全策略(如 ELBSecurityPolicy-TLS13-1-2-2021-06)
最佳实践:直接选择云厂商提供的、带有 strict 或类似后缀的最新安全策略。这些策略由云厂商定期更新,自动禁用不安全的套件,省去手动维护的麻烦。
五、验证与测试
配置完成后,必须验证是否已成功禁用弱协议和套件。
在线工具扫描(推荐):
SSL Labs SSL Test:访问 https://www.ssllabs.com/ssltest/,输入你的域名,等待全面报告。重点关注 “Configuration” 部分,确保协议和套件评分达到 A或A+。
Mozilla SSL Configuration Generator:https://ssl-config.mozilla.org/,可参考其生成的推荐配置。
命令行快速测试:
bash
测试是否接受 TLS 1.0 连接 (应被拒绝)
openssl s_client -connect yourdomain.com:443 -tls1
测试是否接受 TLS 1.1 连接 (应被拒绝)
openssl s_client -connect yourdomain.com:443 -tls1_1
测试 TLS 1.2 连接 (应成功)
openssl s_client -connect yourdomain.com:443 -tls1_2
如果旧协议连接被拒绝(连接失败或握手错误),而新协议连接成功,则说明配置生效。
配置总结与建议
起步方案:在Nginx/Traefik配置中仅启用TLS 1.2和1.3,并使用上文提供的现代加密套件列表。
云服务方案:直接选用云负载均衡器提供的最新严格(strict)安全策略。
必做检查:修改后,立即使用SSL Labs工具进行扫描,确保没有遗漏的不安全项。
兼容性回退:如果发现必须支持某些老旧客户端(如Windows 7的IE),可以在套件列表末尾谨慎添加个别高强度但兼容的套件(如 ECDHE-RSA-AES128-SHA256),并持续监控。
安全配置不是一劳永逸的,建议每半年回顾一次配置,关注业界安全动态(如新发现的漏洞),并及时调整。
如果知到具体是哪种Ingress Controller或负载均衡器,以及主要用户群体可能使用的客户端范围,我们可以提供更精确的配置流程。