系统默认加密套件偏向兼容性,需主动禁用SSLv2/v3、TLS1.0/1.1及RC4、SHA1等弱算法;应强制启用TLS1.2+、PFS与AEAD套件,并通过工具验证协商结果。

系统默认加密套件通常偏向兼容性而非安全性,容易保留弱算法(如 RC4、SHA1、MD5)和不安全协议(如 SSLv2/SSLv3、TLS 1.0/1.1),需主动干预筛选和剔除。
识别当前启用的加密套件与协议
不同系统/服务获取方式不同,但核心是查看实际协商能力而非配置列表:
- Web 服务器(如 Nginx/Apache):通过 openssl s_client -connect host:port -tls1_2 测试 TLS 1.2 握手,并结合 -cipher 指定套件观察是否成功
- Java 应用:启用 JVM 参数 -Djavax.net.debug=ssl:handshake 查看运行时协商细节
- Windows 系统:使用 IISCrypto 工具 或 PowerShell 命令 Get-TlsCipherSuite(Win10+/Server 2016+)列出可用套件
- 通用验证:用在线工具(如 SSL Labs 的 SSL Test)扫描公网服务,它会明确标出不安全协议与弱套件
强制禁用不安全协议版本
TLS 1.0 和 1.1 已被主流标准(PCI DSS、NIST、RFC 8996)弃用,SSLv2/v3 存在根本性设计缺陷,必须关闭:
- Nginx:在 ssl_protocols 中仅保留 TLSv1.2 TLSv1.3
- Apache:设置 SSLProtocol -all +TLSv1.2 +TLSv1.3
- OpenSSL 配置(openssl.cnf):修改 MinProtocol = TLSv1.2,并确保 CipherString = DEFAULT@SECLEVEL=2(SECLEVEL=2 自动排除弱算法)
- Java:在 java.security 文件中设置 jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1
精简并加固加密套件列表
优先选择前向保密(PFS)、AEAD 模式、密钥长度 ≥256 位的套件,避免静态 RSA 密钥交换和 SHA-1 签名:
- 推荐组合(以 OpenSSL 格式为例):ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305
- 必须剔除的套件特征:RC4、DES、3DES、EXPORT、MD5、SHA1、aNULL、eNULL、EXPORT、LOW、MEDIUM
- 验证有效性:用 openssl ciphers -s -V 'YOUR_CIPHER_STRING' 输出各套件的协议版本、密钥交换、认证、加密、MAC 信息,逐项核对是否符合要求
注意服务端与客户端行为差异
某些系统(如旧版 Windows、Android 4.x、Java 7u95 前)默认不支持 TLS 1.2 或 ECDHE,强行禁用旧协议可能导致连接失败:
- 生产环境调整前,先在灰度节点或测试环境验证客户端兼容性
- 若需兼容老旧设备,可临时保留 TLS 1.2 + 强套件,但绝不降级到 TLS 1.1 及以下
- 浏览器端可通过 chrome://flags/#tls13-variant 或 Firefox 的 about:config 查看当前支持的协议与套件










