这类问题我又碰上了一次。主域名用通配符证书正常,访问带二级前缀的地址时浏览器提示证书名称不匹配,可证书看起来没有过期。
真正麻烦的地方在于,几个原因的现象几乎一样。通配符只匹配一级子域,多级子域不在范围内;证书里没有把实际域名加入备用名称;同一台机器上多个站点用错了证书文件。
上来先看证书覆盖的域名列表
openssl x509 -in cert.pem -noout -text | grep -A2 'Subject Alternative Name'
随后确认实际访问的域名层级
curl -Iv https://子域名.example.com 2>&1 | grep -i 'subject:'
为多级域名单独申请证书
certbot certonly -d sub.example.com
末了按域名分站点配置证书
grep -rn ssl_certificate /etc/nginx/conf.d/
中途换过一次思路,把范围缩到最小的那一层,反而快了。
改完先别撤,确认这几项。访问该域名时不再提示名称不匹配,证书链校验通过。
提醒一点。通配符看着省事,但多级子域必须单独签;证书数量多了以后要建一张到期和覆盖范围对照表。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。