二级域名*证书不能匹配一级域名

二级域名*证书不能匹配一级域名

起因

业务方买了个域名用到品牌推广上,只做一个简单的跳转需求,访问时转到已存在的业务网站即可。这种情况下给域名申请一个免费的ssl证书,用于https访问的跳转,但是遇到了一个问题,如下:

比较奇怪,一般印象里面既然有的*.smartyoudao.com的ssl证书了,smartyoudao.com也应该能匹配才对。

排查

之前遇到的付费*.example.com的ssl证书是可以用到example.com,

比如我们的https://youdao.com/https://www.youdao.com/ ssl证书是一个,是付费的证书,smartyoudao.com的区别是申请免费三个月*证书,但是我的博客网站wuyungai.com也是申请的免费的ssl证书,查看一下三个网站ssl证书的详情,对比一下三者之间的区别,发现字段 X509v3 Subject Alternative Name 不一样,具体如下:

SAN是什么

数据完全:Subject Alternative Name详解

SAN是数字证书中的一个扩展字段,允许证书不仅仅与单一的主题名称(如Common Name, CN)关联,而且可以与多个主机名、域名、IP地址、电子邮件地址等关联。这意味着使用SAN的证书可以用来保护多个不同的域名和系统,极大地增加了证书的实用性和灵活性。SAN使得一个证书可以保护多个域名和子域名。

以百度为例,可以看到baidu.com的ssl中的SAN有特别多的二级域名

#使用openssl导出baidu.com和baidu.cn的ssl证书,然后对比两者之间的区别
openssl s_client -connect  baidu.com:443 -servername baidu.com</dev/null | openssl x509 >  baidu.com.pem

openssl s_client -connect  baidu.cn:443 -servername baidu.cn < /dev/null | openssl x509 >  bai.cn.pem

diff baidu.com.pem  bai.cn.pem

修复

出现这个问题主要是申请免费ssl证书的时候SAN指定不全导致的,默认使用的acme方式,申请时候-d指定多个域名就可以,例如

./acme.sh --issue -d smartyoudao.com -d *.smartyoudao.com  --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please

./acme.sh --renew -d smartyoudao.com -d *.smartyoudao.com  --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please

签发完成后再查看,这次SAN是*.smartyoudao.com和smartyoudao.com都支持了,部署到线上进行验证符合预期结果。

最后

之前给一些三级域名申请免费ssl证书的大部分都是指定好的,很少遇到只配置一个二级域名和一个www三级域名的需求,就没有遇到这种问题,这次刚好遇到了,正好排查后学习一下。

留下回复

error: Content is protected !!