服务器SSL证书合规检查需围绕协议安全、证书有效性、配置完整性、生命周期可控四维度展开,必须禁用TLS 1.0/1.1及弱算法,启用TLS 1.2+、PFS套件、HSTS与OCSP装订,确保证书链完整、有效期≥90天、密钥≥2048位,并建立自动化监控预警机制。

服务器 SSL 证书合规检查不是简单确认“有没有 HTTPS”,而是围绕协议安全、证书有效性、配置完整性、生命周期可控这四个刚性维度展开。核心目标是满足等保2.0、PCI-DSS、GDPR 等主流合规要求,避免因弱协议、过期证书或链断裂导致审计不通过或服务中断。
验证 TLS 协议版本与密码套件是否合规
必须禁用 SSLv2/v3、TLS 1.0/1.1,仅允许 TLS 1.2 及以上(推荐 TLS 1.3)。同时淘汰 RC4、3DES、MD5、SHA1 等弱算法。
- 用 openssl s_client -connect example.com:443 -tls1_2 测试是否能成功握手;尝试 -tls1 或 -ssl3 应该失败
- 运行 sslscan example.com,查看输出中支持的协议列表和密码套件,重点检查是否存在 ECDHE-ECDSA-AES256-GCM-SHA384 等现代组合,排除含 RC4、DES、MD5 的条目
- 在 Nginx/Apache 配置中确认已显式设置 ssl_protocols TLSv1.2 TLSv1.3; 和 ssl_ciphers 白名单(如 Mozilla 推荐的 modern 或 intermediate 配置)
检查证书链完整性与部署正确性
浏览器信任依赖完整证书路径:域名证书 → 中间证书 → 根证书(根证书通常已预置,中间证书必须由服务器主动提供)。
- 浏览器访问站点,点击地址栏小锁图标 → “证书” → 查看“证书路径”,正常应显示三级(至少两级),若只有一级,说明中间证书缺失
- 用命令 openssl s_client -connect example.com:443 -showcerts,观察输出中是否连续出现多个 -----BEGIN CERTIFICATE----- 块;也可用 curl -I https://example.com 配合 openssl x509 -noout -text 解析每一段
- Nginx 中确保 ssl_certificate 指向的文件是拼接后的 fullchain.pem(域名证书在前,中间证书在后),不能仅放域名证书;Apache 同理需合并为单个 .crt 文件
确认证书有效期、域名匹配与签名强度
证书必须在有效期内、绑定的域名与实际访问域名完全一致(含 www 与非 www)、私钥强度达标(RSA ≥2048 位,ECC ≥256 位),且签名算法不使用 SHA1。
- 执行 openssl x509 -in fullchain.pem -noout -dates -subject -issuer -sigalg,核对 notBefore/notAfter 时间、CN= 或 subjectAltName 是否覆盖当前域名、Signature Algorithm 是否为 sha256WithRSAEncryption 或 ecdsa-with-SHA256
- 检查私钥是否匹配:分别对证书和私钥运行 openssl x509 -noout -modulus -in cert.pem | openssl md5 和 openssl rsa -noout -modulus -in key.pem | openssl md5,两个 MD5 值必须一致
- 若使用通配符证书(*.example.com),确认它不适用于二级子域如 api.admin.example.com;多域名证书需检查 SAN 列表是否包含所有实际使用的域名
建立常态化监控与到期预警机制
人工抽查不可持续。尤其在阿里云等云环境,RDS、Redis、MongoDB 等中间件实例的 SSL 开启状态和证书到期时间必须集中可视、自动告警。
- 对自建服务器,可用脚本定期调用 openssl s_client 获取证书信息,提取 notAfter 字段,结合当前时间计算剩余天数,低于 60 天即触发邮件/钉钉告警
- 对阿里云 RDS/Redis 实例,需通过阿里云 OpenAPI(如 DescribeDBInstanceSSL、DescribeInstanceAttribute)批量拉取 SSL 开启状态及证书过期时间,接入内部监控平台(如 Prometheus + Grafana)实现大盘可视化
- 所有证书更新操作需记录工单、留痕可追溯;建议将证书文件纳入 Git 版本管理(私钥除外),并设置自动扫描,禁止提交过期或弱签名证书


















