有时用户在部署完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中。