准备工作与前提条件
1) 确认已在安恒云WAF控制台完成证书上传并绑定对应的域名(含主域名与子域名/泛域名)。
2) 确认上传内容包括:服务器证书(.crt)、中间证书链(CA bundle)与私钥(.key),且私钥未加错误密码。
3) 确认WAF策略已启用HTTPS监听端口443,并且已经将后端回源设置为HTTPS或HTTP按需求配置。
4) 准备一台运维主机,用于远程验证:示例 CentOS 7,OpenSSL 1.1.1,curl 7.29.0,ping、telnet可用。
5) 记录证书元信息:Common Name、SAN、有效期(示例:CN=www.example.com;SAN=www.example.com, example.com;有效期2024-05-01至2026-05-01)。
6) 如果使用SNI,确认运维主机的测试工具支持SNI(OpenSSL 若版本>=1.0.1 支持SNI)。
上传后立即检查:控制台与证书链校验
1) 在安恒云WAF控制台查看证书状态:应显示“已生效”或“正常”,并提示绑定域名列表。
2) 检查证书链是否完整:确保证书下方显示“完整链”或上传的中间证书被识别。
3) 验证证书有效期与签发机构是否一致,注意根CA是否为受信任根。
4) 若控制台提示链不完整或证书异常,重新上传包含完整中间链的bundle文件再绑定。
5) 记录控制台显示的证书指纹(SHA-256 Fingerprint),用于与后续s_client输出比对。
6) 若使用WAF证书替换原站证书,确认DNS解析已经指向WAF的IP或CNAME已生效。
使用openssl与curl进行HTTPS基础验证(带示例命令与输出)
1) openssl 基础验证命令(示例):openssl s_client -connect www.example.com:443 -servername www.example.com
2) 示例关键输出(节选):
---
Certificate chain
0 s:/CN=www.example.com
1 s:/CN=Let's Encrypt Authority X3
---
SSL-Session:
Protocol : TLSv1.3
Cipher : TLS_AES_128_GCM_SHA256
Verify return code: 0 (ok)
3) curl 验证与HTTP头(示例):curl -I -v --http2 https://www.example.com
4) 示例curl输出节选:
* Connected to www.example.com (203.0.113.10) port 443 (#0)
* ALPN, server accepted to use h2
> GET / HTTP/1.1
> Host: www.example.com
< HTTP/2 200
< server: nginx
< strict-transport-security: max-age=31536000; includeSubDomains
5) 若openssl显示Verify return code不为0,需检查中间链是否上传完整或私钥是否匹配。
6) 对于多个域名,使用-sni(-servername)分别测试每个域名的证书链与SNI生效情况。
兼容性测试:TLS版本、Cipher 与浏览器支持(包含对比表)
1) 需逐项测试:TLSv1.3、TLSv1.2、TLSv1.1(建议禁用)、TLSv1.0(强烈建议禁用)。
2) 使用openssl测试指定协议(示例):
openssl s_client -connect www.example.com:443 -servername www.example.com -tls1_2
3) 测试常用浏览器兼容性(Chrome/Edge/Firefox/Safari/IE11)并记录结果。
4) 推荐开启HTTP/2与ALPN以提升性能,但要确保老旧客户端回退到HTTP/1.1可用。
5) 下面给出一个示例兼容性矩阵(SSL Labs 简化版),用于记录不同客户端支持情况:
| 客户端 | TLS1.3 | TLS1.2 | Cipher 示例 | 备注 |
| Chrome 120 (桌面) | 支持 | 支持 | TLS_AES_128_GCM_SHA256 | 支持HTTP/2、ALPN |
| Firefox 115 | 支持 | 支持 | TLS_CHACHA20_POLY1305_SHA256 | 推荐开启OCSP Stapling |
| IE11 (Win7) | 不支持 | 支持 | TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 | 需要保留TLS1.2和兼容Cipher |
6) 根据表格结果调整WAF中的协议和Cipher白名单以平衡安全性与兼容性。
真实案例:某客户站点在安恒云WAF切换证书后的故障与解决
1) 背景:客户www.shop-example.com在22:00上传新证书并绑定,次日部分用户反馈手机端无法打开。
2) 运维排查步骤:检查WAF证书状态->使用openssl s_client对比指纹->使用curl观察是否有ALPN协商失败。
3) 发现问题:上传的证书缺失中间CA,桌面浏览器基于缓存仍可访问,部分手机浏览器报“证书链不完整”。
4) 解决办法:重打包含中间链的bundle上传至安恒云WAF,证书指纹校验一致后刷新绑定并下线旧证书缓存(生效时间约2分钟)。
5) 结果与数据:修复后通过openssl再次验证Verify return code=0;外网采样用户成功率从92%上升到99.8%。
6) 教训:务必一次性上传完整证书链并在流量高峰外完成切换,保留回滚计划与监控告警。示例证书信息记录如下:
证书CN: www.shop-example.com
颁发机构: Let's Encrypt
有效期: 2025-03-01 至 2025-06-01
指纹(SHA256): AB:CD:12:34:...:EF
常见故障与排查步骤清单
1) 问题:浏览器显示不受信任证书或证书链不完整。排查:检查中间证书是否上传,使用openssl s_client查看证书链。
2) 问题:部分老设备无法连接(TLS握手失败)。排查:确认是否禁用了TLS1.0/1.1,查看WAF Cipher 列表是否过于严格。
3) 问题:OCSP/CRL 验证失败导致浏览器弹窗。排查:检查WAF是否启用OCSP Stapling并确认后端证书支持。
4) 问题:HTTP->HTTPS重定向循环或HSTS导致访问问题。排查:检查WAF与后端的重写规则与HSTS配置。
5) 问题:证书私钥不匹配。排查:用openssl x509 -noout -modulus -in cert.crt 与 openssl rsa -noout -modulus -in key.key 比较modulus。
6) 紧急回滚:若新证书导致不可用,第一时间在WAF控制台切换回旧证书并通知DNS/缓存刷新;记录变更时间与影响范围。
总结与上线前核对清单
1) 核对证书链完整性、私钥匹配与证书指纹一致性。
2) 使用 openssl、curl、浏览器和SSL Labs(或类似工具)全方位验证TLS版本、Cipher、HTTP/2与OCSP。
3) 验证不同客户端(iOS/Android/Windows/Mac)与不同网络(直接/通过CDN)下的访问成功率。
4) 在非高峰期进行切换,准备回滚计划,并在变更后30分钟内密切监控访问日志与错误率。
5) 建议建立标准化运维脚本与记录模板(示例命令、证书元数据、指纹、变更时间),便于审计与快速排查。
6) 复用本手册作为SOP:一键验证脚本(openssl/curl脚本)+兼容性表格,确保每次上传证书后的稳定上线。