Azure Windows自签名证书链生成与部署指南 1. 为什么我们需要自签名证书链在Azure Windows环境中部署服务时SSL/TLS证书是保障通信安全的基础设施。自签名证书链Self-Signed Certificate Chain相比单层证书具有以下不可替代的优势完整信任链验证浏览器和客户端会逐级验证从终端证书到根证书的完整链条模拟真实CA签发环境多级权限隔离根证书Root CA可以离线保存仅用中间证书Intermediate CA签发终端证书降低私钥泄露风险测试场景还原度更贴近企业实际PKI体系避免单证书测试通过但正式部署时因证书链问题失败重要提示自签名证书仅适用于测试和开发环境生产环境必须使用受信任CA签发的证书2. 环境准备与OpenSSL配置2.1 OpenSSL for Windows安装指南虽然Azure Windows Server默认不包含OpenSSL但推荐通过以下方式获取可靠版本访问OpenSSL官网下载页注意避开第三方修改版选择Win64 OpenSSL v1.1.1x Light安装包约5MB安装时勾选Add OpenSSL to the system PATH验证安装成功openssl version # 应显示类似 OpenSSL 1.1.1u 30 May 20232.2 关键目录结构规划建议在C盘创建专用工作目录C:\Certs\ ├── root\ # 根证书材料 ├── intermediate\ # 中间证书材料 └── server\ # 终端证书材料3. 生成三级证书链全流程3.1 生成根证书Root CA创建根证书私钥2048位RSAopenssl genrsa -aes256 -out C:\Certs\root\rootCA.key 2048此处会提示输入保护密码建议使用12位以上混合字符生成自签名根证书有效期10年openssl req -x509 -new -nodes -key C:\Certs\root\rootCA.key \ -sha256 -days 3650 -out C:\Certs\root\rootCA.crt \ -subj /CCN/STBeijing/LBeijing/OMyOrg/OUIT/CNMyRootCA3.2 生成中间证书Intermediate CA创建中间CA私钥openssl genrsa -out C:\Certs\intermediate\intermediateCA.key 2048生成证书签名请求CSRopenssl req -new -key C:\Certs\intermediate\intermediateCA.key \ -out C:\Certs\intermediate\intermediateCA.csr \ -subj /CCN/STBeijing/LBeijing/OMyOrg/OUIT/CNMyIntermediateCA用根CA签发中间证书有效期5年openssl x509 -req -in C:\Certs\intermediate\intermediateCA.csr \ -CA C:\Certs\root\rootCA.crt -CAkey C:\Certs\root\rootCA.key \ -CAcreateserial -out C:\Certs\intermediate\intermediateCA.crt \ -days 1825 -sha2563.3 生成服务器证书创建服务器私钥openssl genrsa -out C:\Certs\server\server.key 2048生成CSR注意CN需匹配域名openssl req -new -key C:\Certs\server\server.key \ -out C:\Certs\server\server.csr \ -subj /CCN/STBeijing/LBeijing/OMyOrg/OUWeb/CNmysite.example.com用中间CA签发服务器证书有效期1年openssl x509 -req -in C:\Certs\server\server.csr \ -CA C:\Certs\intermediate\intermediateCA.crt \ -CAkey C:\Certs\intermediate\intermediateCA.key \ -CAcreateserial -out C:\Certs\server\server.crt \ -days 365 -sha2564. 证书链验证与格式转换4.1 验证证书链完整性组合证书链文件type C:\Certs\server\server.crt C:\Certs\intermediate\intermediateCA.crt C:\Certs\server\fullchain.crt验证链结构openssl verify -CAfile C:\Certs\root\rootCA.crt -untrusted C:\Certs\intermediate\intermediateCA.crt C:\Certs\server\server.crt # 应显示 OK openssl crl2pkcs7 -nocrl -certfile C:\Certs\server\fullchain.crt | openssl pkcs7 -print_certs -noout # 查看完整证书链信息4.2 生成PFX格式证书用于IIS/Azure合并私钥和证书链为PFXopenssl pkcs12 -export -out C:\Certs\server\server.pfx \ -inkey C:\Certs\server\server.key \ -in C:\Certs\server\server.crt \ -certfile C:\Certs\intermediate\intermediateCA.crt \ -password pass:YourPFXPassword5. Azure环境证书部署要点5.1 上传到Azure Key Vault使用Azure CLI上传PFXaz keyvault certificate import --vault-name MyVault \ --name MyCert --file C:\Certs\server\server.pfx \ --password YourPFXPassword5.2 IIS服务器绑定配置打开IIS管理器 → 服务器证书导入PFX文件需提供密码站点绑定中选择HTTPS和导入的证书5.3 客户端信任配置将根证书rootCA.crt双击安装到受信任的根证书颁发机构通过组策略批量部署企业环境6. 常见问题排查指南6.1 证书链不完整错误症状浏览器显示此证书因为颁发者证书未知而不被信任解决方案# 确认中间证书是否正确包含 openssl s_client -connect mysite.example.com:443 -showcerts6.2 SCHANNEL错误日志分析查看Windows系统日志事件查看器 → Windows日志 → 系统 → 筛选来源Schannel典型错误0x80090326证书链验证失败0x80092004证书已吊销6.3 证书密钥用法不匹配修正方法生成CSR时添加扩展文件[ req_ext ] subjectAltName DNS:mysite.example.com keyUsage digitalSignature, keyEncipherment extendedKeyUsage serverAuth7. 高级配置技巧7.1 证书自动续期方案使用PowerShell脚本自动化# 检查证书过期时间 $cert Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.Subject -match mysite } $cert.NotAfter7.2 证书吊销列表CRL生成创建CRL分发点openssl ca -gencrl -keyfile C:\Certs\intermediate\intermediateCA.key \ -cert C:\Certs\intermediate\intermediateCA.crt \ -out C:\Certs\intermediate\intermediateCA.crl7.3 证书透明度日志CT模拟虽然自签名证书不需要CT但可以添加SCT扩展openssl x509 -in C:\Certs\server\server.crt -text -noout | findstr CT在实际操作中发现Azure应用服务对证书链的处理有特殊要求——必须确保中间证书在PFX中的顺序正确。一个可靠的验证方法是使用OpenSSL重新解压PFX查看证书顺序openssl pkcs12 -in server.pfx -nodes -info正确的顺序应该是服务器证书 → 中间证书不能包含根证书