在当今多域名部署场景中,为每个域名单独申请证书既增加成本又带来管理负担。通过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