1. 证书上传前的总体准备
· 确认服务器与WAF场景:外网HTTPS接入由安恒云WAF终端接收证书并转发到后端服务器。
· 准备文件:私钥(key)、域名证书(cert/leaf)与中间证书链(chain/ca-bundle)。
· 工具要求:建议使用 OpenSSL 1.1.x 或更高版本与可登陆的WAF管理控制台。
· 备份原有证书:上传前在WAF控制台和后端服务器保留备份,以便回滚。
· 校验兼容性:确认后端(Nginx/Apache)与WAF的TLS版本、密钥长度(2048/4096)和证书算法(RSA/ECDSA)。
2. 私钥与CSR生成示例(包含具体命令与数据)
· 生成2048位RSA私钥示例(CentOS/Nginx场景):
openssl genpkey -algorithm RSA -out example.com.key -pkeyopt rsa_keygen_bits:2048
· 生成CSR示例(主题包含Common Name=www.example.com):
openssl req -new -key example.com.key -out example.com.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Example/OU=IT/CN=www.example.com"
· 输出示例私钥文件头部(PKCS#1)显示:
-----BEGIN RSA PRIVATE KEY-----
· CSR检查命令示例与输出字段:
openssl req -in example.com.csr -noout -text
· 私钥权限建议:chmod 600 example.com.key,避免被非授权用户读取。
3. 私钥格式说明与相互转换(PKCS#1/PKCS#8/DER/PEM)
· PKCS#1(RSA)私钥PEM头:-----BEGIN RSA PRIVATE KEY-----。
· PKCS#8私钥PEM头(通用):-----BEGIN PRIVATE KEY-----(无加密)或-----BEGIN ENCRYPTED PRIVATE KEY-----(有密码)。
· 转为PKCS#8(不加密)示例:
openssl pkcs8 -topk8 -inform PEM -outform PEM -in example.com.key -out example.com.pk8 -nocrypt
· 将DER转PEM示例(证书或私钥):
openssl rsa -inform DER -in key.der -outform PEM -out key.pem
· 如果私钥有口令,上传前需在WAF控制台填写解密密码或先在本地移除密码(谨慎操作):
openssl rsa -in key_with_pass.key -out key_no_pass.key
4. 证书链的正确顺序与合并技巧
· 证书链正确顺序:服务器证书(Leaf) -> 中间CA证书(Intermediate) -> 根证书(Root,通常可选)。
· 合并证书链命令(生成ca-bundle):
cat intermediate.crt root.crt > ca-bundle.crt
· 在大多数WAF或Nginx配置中,ssl_certificate 应该指向包含leaf+intermediate的合并文件,而 ssl_certificate_key 指向私钥。
· 验证链完整性命令:
openssl verify -CAfile ca-bundle.crt example.com.crt
· 注意:不要在合并文件中改变证书顺序或插入多余空行,避免TLS握手失败。
5. 在安恒云WAF控制台上传的具体步骤与字段示例
· 登录控制台 -> 安全产品 -> WAF -> 证书管理 -> 新增/上传证书。
· 常见字段与示例:名称:www-example-com;域名:www.example.com;环境:生产/测试;证书类型:RSA-2048。
· 证书文件字段:Certificate(上传example.com.crt或合并后的cert+intermediate),Private Key(上传example.com.key),Private Key Passphrase(如有)。
· 上传后在WAF策略中绑定域名:选择针对域名的监听端口(80/443)和证书策略。
· UI上传注意:文件编码需为PEM文本(ASCII),避免使用含有Windows行结束符的文件(建议使用 dos2unix 转换)。
6. 常见错误与排查命令(带具体示例)
· 错误:证书链不完整 -> 报错示例:handshake failure;排查:openssl s_client -connect www.example.com:443 -servername www.example.com。
· 错误:私钥与证书不匹配 -> 排查方法:比较模数(modulus):
openssl rsa -noout -modulus -in example.com.key | openssl md5
openssl x509 -noout -modulus -in example.com.crt | openssl md5
· 错误:证书格式错误(DER/PEM混用) -> 用 openssl x509 -in example.com.crt -noout -text 检查。
· 错误:私钥加密但未提供密码 -> 控制台会报解密失败;解决:在上传时填写密码或先去除密码。
· 权限问题:后端服务器 Nginx 读取私钥权限过宽会被拒绝,建议 chmod 600 且属主为 nginx 或 root。
7. 真实案例:CentOS7 + Nginx 1.18 + OpenSSL 1.1.1 的配置示例(含表格展示)
· 环境信息示例:操作系统:CentOS 7.9;Nginx:1.18.0;OpenSSL:1.1.1g;私钥长度:2048。
· Nginx 配置片段示例(绑定WAF回源或直连场景):
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/ssl/example.com.bundle.crt;
ssl_certificate_key /etc/ssl/example.com.key;
}
· 真实证书文件示例名与大小(用于演示)。
· 以下表格列出示例文件、内容与格式(居中展示):
| 文件名 | 内容 | 格式 | 示例大小 |
| example.com.key | 私钥(RSA,2048) | PEM | 1.7 KB |
| example.com.crt | 域名证书(Leaf) | PEM | 1.2 KB |
| ca-bundle.crt | 中间CA链(Intermediate+Root) | PEM | 3.4 KB |
· 案例结果:完成上传并在WAF策略中绑定后,通过外部检测(ssllabs 或 openssl s_client)证书链完整性与协议兼容性均通过。