多域名SSL证书,也称为SAN(Subject Alternative Name)证书,可以保护多个域名。下面是部署多域名证书的正确步骤和注意的几个事项事项:
生成证书签名请求(CSR)时,需要指定多个域名。这可以通过在CSR配置文件中使用subjectAltName字段来实现。例如,创建一个名为san.cnf的配置文件,内容如下:
text
[req]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
[req_distinguished_name]
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name (full name)
localityName = Locality Name (eg, city)
organizationalUnitName = Organizational Unit Name (eg, section)
commonName = Common Name (e.g. server FQDN or YOUR name)
emailAddress = Email Address
[req_ext]
subjectAltName = @alt_names
[alt_names]
DNS.1 = example.com
DNS.2 = www.example.com
DNS.3 = example.net
DNS.4 = www.example.net
然后,使用OpenSSL生成CSR和私钥:
bash
openssl req -new -keyout server.key -out server.csr -config san.cnf
在生成CSR的过程中,你需要填写一些信息,其中Common Name(CN)可以填写主域名,但请注意,现代浏览器通常忽略CN而使用SAN,所以确保所有域名都列在SAN中。
将CSR提交给证书颁发机构(CA),CA会验证你对这些域名的控制权,然后颁发证书。
获取证书后,配置你的Web服务器以使用该证书。以下是一些常见服务器的配置示例:
Nginx:
在Nginx配置文件中,指定证书和私钥的路径:
nginx
server {
listen 443 ssl;
server_name example.com www.example.com example.net www.example.net;
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;
其他SSL配置...
}
Apache:
在Apache配置文件中,使用SSLCertificateFile和SSLCertificateKeyFile指令:
apache
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com example.net www.example.net
SSLEngine on
SSLCertificateFile /path/to/your/certificate.crt
SSLCertificateKeyFile /path/to/your/private.key
其他配置...
</VirtualHost>
注意证书的覆盖范围:多域名证书可以保护多个域名,但请注意,每个证书都有域名的数量限制,通常取决于CA。另外,证书的域名列表是固定的,如果需要添加新的域名,需要重新签发证书。
安全性:私钥(server.key)必须妥善保管,不能泄露。在生成CSR后,私钥通常留在服务器上,而CSR被发送给CA。
证书更新:多域名证书的有效期通常为一年或更短,需要在到期前续订。续订时,你可以重新生成CSR(可以添加或删除域名),然后申请新的证书。
性能:多域名证书与单域名证书在性能上没有显著差异,因为SSL/TLS握手过程中传输的证书大小可能略有增加,但通常可以忽略。
兼容性:多域名证书被所有现代浏览器支持,但需要注意,证书中的每个域名都必须得到验证。
通过以上步骤,你可以正确地部署多域名证书来保护多个域名。
多域名证书(Multi-Domain SSL Certificate),也称为SAN证书或UCC证书,可以保护多个域名和子域名。以下是正确的部署姿势:
一、证书类型选择
1. SAN证书(Subject Alternative Name)
保护多个不同的域名
示例:example.com、shop.example.net、api.example.org
2. 通配符多域名证书
保护多个主域名及其所有子域名
示例:.example.com、.example.net
3. 统一通信证书(UCC)
专为Microsoft Exchange和Office Communications设计
也可用于一般多域名保护
二、正确申请流程
1. 生成CSR时包含所有域名
bash
创建配置文件 san.cnf
[req]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
[req_distinguished_name]
countryName = CN
stateOrProvinceName = Zhejiang
localityName = Hangzhou
organizationName = Your Company
commonName = primary-domain.com # 主域名
[req_ext]
subjectAltName = @alt_names
[alt_names]
DNS.1 = primary-domain.com
DNS.2 = www.primary-domain.com
DNS.3 = secondary-domain.com
DNS.4 = shop.secondary-domain.com
DNS.5 = api.third-domain.net
2. 生成密钥和CSR
bash
openssl req -new -nodes -keyout server.key \
-out server.csr -config san.cnf
三、服务器配置示例
1. Nginx配置
nginx
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/multi-domain.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
其他域名通过server_name自动匹配
}
server {
listen 443 ssl;
server_name api.example.net;
ssl_certificate /etc/nginx/ssl/multi-domain.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
}
2. Apache配置
apache
<VirtualHost :443>
ServerName primary-domain.com
ServerAlias www.primary-domain.com secondary-domain.com
SSLEngine on
SSLCertificateFile /path/to/multi-domain.crt
SSLCertificateKeyFile /path/to/server.key
如果使用中级证书
SSLCertificateChainFile /path/to/intermediate.crt
</VirtualHost>
3. 负载均衡器配置
AWS ALB/NLB:在监听器设置中上传证书
HAProxy:
haproxy
frontend https_frontend
bind *:443 ssl crt /etc/haproxy/certs/multi-domain.pem
证书需合并:cat multi-domain.crt intermediate.crt server.key > multi-domain.pem
四、最佳实践
1. 域名管理
数量限制:通常支持100-250个域名
后期添加:大多数CA允许后续添加域名(可能需要重新签发)
定期审查:移除不再使用的域名
2. 安全强化
nginx
TLS配置优化
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
3. 监控与更新
bash
检查证书信息
openssl x509 -in multi-domain.crt -text -noout
检查剩余有效期
openssl x509 -in multi-domain.crt -checkend 86400
五、注意事项
1. 覆盖率检查
确保证书包含所有需要保护的域名
避免遗漏子域名或新添加的域名
2. 成本效益分析
适合中小规模的多域名场景
大量域名(50+)可能需要多个证书或通配符证书
3. 备份与恢复
安全存储私钥
备份完整的证书链
记录证书包含的域名列表
六、自动化方案
1. 使用acme.sh自动化
bash
申请多域名证书
acme.sh --issue -d example.com -d www.example.com \
-d api.example.net --webroot /var/www/html
安装到Nginx
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/key.pem \
--fullchain-file /etc/nginx/ssl/cert.pem
2. 使用Certbot
bash
certbot certonly --nginx \
-d example.com -d www.example.com \
-d shop.example.net --expand
七、故障排查
证书不匹配错误:检查server_name配置
浏览器警告:确保证书链完整
性能问题:证书文件大小可能影响握手速度
总结并给用户一些建议
中小规模多域名场景推荐使用SAN证书
定期监控证书有效期,设置自动续期
使用自动化工具管理SSL证书生命周期
根据实际需求选择合适类型的证书
做好证书使用的记录和审计
用户正确部署多域名证书可以简化管理,降低成本,同时确保所有域名的安全连接。