使用OpenSSL生成支持多域名(SAN)的SSL证书
在当今多域名部署场景中,为每个域名单独申请证书既增加成本又带来管理负担。通过OpenSSL生成支持Subject Alternative Name(SAN)的多域名证书,只需一个证书即可保护多个域名。本文将手把手教你完成从生成密钥到验证证书的完整流程。
一、为什么需要SAN证书?
传统SSL证书通过Common Name (CN)字段指定保护域名,而SAN扩展允许证书同时保护:
多个不同域名(如example.com和example.net)
主域名及其子域名(如*.example.com)
甚至混合域名和IP地址
这是现代Web服务(如同时提供www和api服务)的标准解决方案,获得所有主流浏览器的信任。
二、分步操作指南
步骤1:生成私钥与含SAN的CSR
openssl req -new -SHA256 -newkey rsa:2048 -nodes \
-keyout server.key \
-out server.csr \
-subj "/C=CN/ST=Chongqing/L=Chongqing/O=MyOrg/OU=IT/CN=jermey.cn" \
-addext "subjectAltName=DNS:jermey.cn,DNS:www.jermey.cn"
参数解析:
-newkey rsa:2048:生成2048位RSA私钥
-nodes:私钥不加密(生产环境建议加密)
-subj:简化输入流程,直接指定证书主题
-addext:关键参数,添加SAN扩展,需要OpenSSL 1.1.1+版本
⚠️ 注意:
替换示例中的组织信息(C=国家代码,ST=省,L=市,O=组织,OU=部门)
DNS:后接具体域名,多个域名用逗号分隔
支持通配符域名(如DNS:*.jermey.cn)
步骤2:自签名证书(测试用)
openssl x509 -req -in server.csr -signkey server.key -out server.crt -days 365
说明:
自签名证书仅适用于测试环境
生产环境需提交CSR给CA机构签名
-days 365设置有效期,建议不超过2年
步骤3:验证SAN配置
openssl x509 -text -noout -in server.crt | grep -A1 "Subject Alternative Name"
预期输出:
X509v3 Subject Alternative Name:
DNS:www.example.com, DNS:www.jermey.cn