多域名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证书生命周期

根据实际需求选择合适类型的证书

做好证书使用的记录和审计

用户正确部署多域名证书可以简化管理,降低成本,同时确保所有域名的安全连接。