有时用户在部署完SSL证书时提示证书和域名不匹配,这时需要检查当前证书的详细信息,确认SAN是否存在问题。可以用浏览器查看证书信息,看看SAN部分是否包含了所有需要的域名。比如,如果网站使用example.com和www.example.com,这两个都应该出现在SAN里。如果只有其中一个,访问另一个时就会报错。要修复SSL证书域名不匹配(Subject Alternative Name Missing)的问题,需确保访问的域名包含在证书的SAN(Subject Alternative Name)中。下面就是具体检查步骤:

1. 确认问题原因

检查证书SAN列表:使用浏览器查看证书详情(点击地址栏锁图标 → 证书),检查SAN是否包含所有需要支持的域名(如 example.com、www.example.com 等)。

示例工具验证: 

bash

复制

openssl s_client -connect example.com:443 | openssl x509 -text -noout | grep "DNS:"

2. 重新生成证书

场景1:通过CA申请证书

生成包含SAN的CSR:

创建配置文件 ssl.conf:

ini

复制

[req]

default_bits = 2048

prompt = no

default_md = sha256

distinguished_name = dn

req_extensions = req_ext

[dn]

CN = example.com

O = My Organization

C = US

[req_ext]

subjectAltName = @alt_names

[alt_names]

DNS.1 = example.com

DNS.2 = www.example.com

DNS.3 = sub.example.com

生成CSR和私钥:

bash

复制

openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr -config ssl.conf

提交CSR到CA:在申请证书时,确保CA支持SAN扩展,并正确签发包含所有域名的证书。

场景2:自签名证书

生成自签名证书时直接指定SAN:

bash

复制

openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365 \

subj "/CN=example.com" \

addext "subjectAltName=DNS:example.com,DNS:www.example.com"

注意:若OpenSSL版本较旧(如1.1.1以下),需改用配置文件方式。

3. 安装新证书

将新证书(.crt 或 .pem)和私钥(.key)部署到服务器,并更新Web服务器配置。

示例Nginx配置:

nginx

复制

server {

listen 443 ssl;

server_name example.com www.example.com;

ssl_certificate /path/to/cert.pem;

ssl_certificate_key /path/to/key.pem;

其他配置...

}

4. 重启服务并验证

重启Web服务器:

bash

复制

sudo systemctl restart nginx   # Nginx

sudo systemctl restart apache2 # Apache

验证工具:

浏览器访问网站,确认无警告。

使用命令行检查:

bash

复制

openssl s_client -connect example.com:443 | openssl x509 -text -noout | grep "DNS:"

5. 其他注意事项

通配符证书:若使用 *.example.com,需注意它不覆盖根域名 example.com,需额外添加至SAN。

多域名证书:确保证书类型支持所需的所有域名。

证书链完整:中间证书必须正确安装,避免因链不完整导致验证失败。

上面就是检查SSL证书和域名不匹配,出现报错,修复此问题的核心是重新生成包含所有必要SAN的证书,并正确配置服务器。确保从CA申请或自签名时,所有访问的域名均明确列在SAN中。