用户如何为多个域名配置SSL证书。分以下几种情况:

1. 单个证书包含多个域名(SAN证书)

2. 通配符证书(*.example.com)可以覆盖一个域名的所有子域名

3. 为每个域名单独申请证书

配置步骤大致如下:

1. 生成私钥和证书签名请求(CSR)

2. 从证书颁发机构(CA)获取证书(或者使用自签名证书)

3. 在服务器上配置证书

这里以使用OpenSSL生成CSR和私钥,并且配置Nginx为例。

情况1:单个证书包含多个域名(SAN证书)

步骤:

1. 创建一个包含所有域名的配置文件(比如san.cnf):

[req]

default_bits = 2048

prompt = no

default_md = sha256

req_extensions = req_ext

distinguished_name = dn

[ dn ]

C = CN

ST = Beijing

L = Beijing

O = Example Company

OU = IT Department

emailAddress = admin@example.com

CN = example.com

[ 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

可以继续添加其他域名

2. 生成私钥和CSR:

openssl req -new -nodes -keyout san.key -out san.csr -config san.cnf

3. 将CSR提交给CA,CA会颁发一个包含所有域名的证书。

4. 将CA返回的证书(例如san.crt)和私钥(san.key)放在服务器上。

5. 在Nginx配置中:

server {

listen 443 ssl;

server_name example.com www.example.com example.net www.example.net;

ssl_certificate /path/to/san.crt;

ssl_certificate_key /path/to/san.key;

其他配置

}

注意:如果域名很多,可以配置多个server块,但都指向同一个证书。

情况2:通配符证书

1. 生成CSR时,域名填写为*.example.com

2. 获取通配符证书后,配置Nginx:

server {

listen 443 ssl;

server_name example.com *.example.com;

ssl_certificate /path/to/wildcard.crt;

ssl_certificate_key /path/to/wildcard.key;

其他配置

}

情况3:多个独立证书

为每个域名单独申请证书,然后配置多个server块:

server {

listen 443 ssl;

server_name domain1.com;

ssl_certificate /path/to/domain1.crt;

ssl_certificate_key /path/to/domain1.key;

}

server {

listen 443 ssl;

server_name domain2.com;

ssl_certificate /path/to/domain2.crt;

ssl_certificate_key /path/to/domain2.key;

}

另外,如果使用Let's Encrypt,可以使用Certbot工具自动配置多个域名的证书,支持SAN和通配符。

以Certbot申请通配符证书(需要DNS验证):

certbot certonly --manual --preferred-challenges=dns -d *.example.com -d example.com --server https://acme-v02.api.letsencrypt.org/directory

申请多个域名的SAN证书:

certbot certonly --standalone -d example.com -d www.example.com -d example.net -d www.example.net

然后Certbot会自动获取证书并保存到指定目录(通常是/etc/letsencrypt/live/),在Nginx中配置相应路径即可。

总结:根据需求选择合适的方式。如果多个域名属于同一组服务,使用SAN证书比较方便;如果是同一主域的不同子域,通配符证书更合适;如果域名之间没有关联,独立证书更灵活。

配置多域名的SSL证书通常有两种方法:多域名证书(SAN证书) 和通配符证书。以下是详细步骤:

方法1:多域名证书(SAN证书)

特点:一个证书覆盖多个独立域名(如 example.com + blog.example.net)。

步骤:

生成CSR(证书签名请求)

创建配置文件 san.cnf,包含所有域名:

ini

[req]

default_bits = 2048

distinguished_name = req_distinguished_name

req_extensions = req_ext

[req_distinguished_name]

countryName = CN

stateOrProvinceName = Beijing

localityName = Beijing

organizationName = My Company

commonName = example.com  # 主域名

[req_ext]

subjectAltName = @alt_names

[alt_names]

DNS.1 = example.com      # 主域名

DNS.2 = www.example.com  # 子域名

DNS.3 = blog.example.net # 其他域名

可继续添加更多域名...

生成私钥和CSR:

bash

openssl req -new -nodes -keyout san.key -out san.csr -config san.cnf

向CA申请证书

提交 san.csr 给证书颁发机构(如 Let's Encrypt、DigiCert),CA会返回包含所有域名的证书文件(如 san.crt)。

配置Web服务器

Nginx 示例:

nginx

server {

listen 443 ssl;

server_name example.com www.example.com;

ssl_certificate /path/to/san.crt;

ssl_certificate_key /path/to/san.key;

其他配置...

}

server {

listen 443 ssl;

server_name blog.example.net;

ssl_certificate /path/to/san.crt;  # 使用同一个证书

ssl_certificate_key /path/to/san.key;

其他配置...

}

Apache 示例:

apache

<VirtualHost *:443>

ServerName example.com

SSLEngine on

SSLCertificateFile /path/to/san.crt

SSLCertificateKeyFile /path/to/san.key

</VirtualHost>

<VirtualHost *:443>

ServerName blog.example.net

SSLEngine on

SSLCertificateFile /path/to/san.crt  # 同一个证书

SSLCertificateKeyFile /path/to/san.key

</VirtualHost>

方法2:通配符证书(Wildcard Certificate)

特点:覆盖一个域名的所有子域名(如 *.example.com 包含 blog.example.com、api.example.com),但不支持跨域名(如 example.net)。

步骤:

生成CSR

用通配符作为域名:

bash

openssl req -new -newkey rsa:2048 -nodes \

keyout wildcard.key -out wildcard.csr \

subj "/CN=*.example.com"

向CA申请证书

提交CSR,获取通配符证书(如 wildcard.crt)。

配置Web服务器

Nginx 示例:

nginx

server {

listen 443 ssl;

server_name ~^(.*)\.example\.com$;  # 匹配所有子域名

ssl_certificate /path/to/wildcard.crt;

ssl_certificate_key /path/to/wildcard.key;

}

自动化工具推荐(Let's Encrypt)

使用 certbot 自动申请和管理证书:

多域名证书申请:

bash

certbot certonly --nginx -d example.com -d www.example.com -d blog.example.net

Certbot 会自动配置Nginx并续签证书。

通配符证书申请(需DNS验证):

bash

certbot certonly --manual --preferred-challenges=dns \

d *.example.com -d example.com

根据提示添加DNS TXT记录验证域名所有权。

注意事项

证书兼容性:

SAN证书:确保所有域名在 subjectAltName 中列出。

通配符证书:仅覆盖一级子域名(*.example.com 不包含 a.b.example.com)。

私钥安全:私钥文件(.key)需严格保密。

续签:Let's Encrypt 证书有效期90天,建议配置自动续期:

bash

certbot renew --quiet --no-self-upgrade

用户通过以上几种方法,就可以高效配置多域名SSL证书