一、SAN证书核心概念
SAN证书(Subject Alternative Name)允许在单个SSL/TLS证书中保护多个域名、子域名或IP地址,适用于多域名网站和虚拟化环境。其技术原理是在X.509扩展字段中声明subjectAltName
属性,支持同时绑定多个主体标识。
二、准备生成环境
需安装OpenSSL工具链并创建配置文件:
[ req ] default_bits = 2048 req_extensions = v3_req distinguished_name = req_distinguished_name [ v3_req ] subjectAltName = @alt_names [ alt_names ] DNS.1 = www.example.com DNS.2 = mail.example.org IP.1 = 192.168.1.1
配置文件需包含req_extensions
和subjectAltName
字段定义多域名列表。
三、生成CA根证书
执行以下命令序列:
- 生成CA私钥:
openssl genrsa -out ca.key 4096
- 创建CSR请求:
openssl req -new -key ca.key -out ca.csr
- 自签根证书:
openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt
建议使用-subj
参数批量提交证书信息避免交互式输入。
四、创建多域名CSR文件
通过配置文件生成服务器私钥和CSR:
- 生成私钥:
openssl genpkey -algorithm RSA -out server.key
- 生成CSR:
openssl req -new -key server.key -out server.csr -config san.conf
CSR文件中必须包含subjectAltName
扩展字段声明所有待保护域名。
五、签发SAN证书
使用CA证书签署服务器CSR:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -extfile san.conf -extensions v3_req
通过-extfile
参数加载SAN配置,确保生成证书包含多域名扩展。
六、部署与验证
在Web服务器中配置证书文件:
- Apache示例:
SSLCertificateFile /path/server.crt
SSLCertificateKeyFile /path/server.key - Nginx示例:
ssl_certificate /path/server.crt;
ssl_certificate_key /path/server.key;
可通过openssl x509 -in server.crt -text -noout
验证证书SAN字段完整性。
通过OpenSSL工具链生成SAN证书需重点关注CSR配置中的多域名声明和CA签发流程,建议采用自动化脚本减少人工操作错误。对于生产环境,推荐使用Let’s Encrypt等CA机构签发免费证书以实现自动续期。