OpenSSL 1.1.1K通配符主机名校验失败问题咨询
通配符主机名校验的理解误区解析
你的问题核心是搞反了OpenSSL主机名校验的匹配方向:
- OpenSSL的
-checkhost参数是用你指定的主机名,去匹配证书中包含的DNS条目,而不是让证书里的DNS条目去匹配你指定的通配符规则。
你当前的证书DNS条目是maps.example.com,所以:
- 当指定
maps.example.com作为校验主机名时,证书里有完全匹配的条目,校验成功; - 当指定
*.example.com作为校验主机名时,证书里根本没有这个通配符条目,自然匹配失败。
正确的通配符校验逻辑
如果想让证书能匹配所有example.com的一级子域名(比如maps.example.com、mail.example.com),你需要生成包含*.example.com这个DNS条目的证书。此时:
- 用
maps.example.com作为校验主机名,会匹配证书里的*.example.com通配符条目,校验成功; - 用
*.example.com作为校验主机名,因为证书里有这个条目,也会校验成功。
补充OpenSSL通配符匹配规则
- 通配符只能出现在DNS条目的最左侧标签,比如
*.example.com合法,maps.*.com不合法; *.example.com仅匹配xxx.example.com这类一级子域名,不匹配example.com本身,也不匹配xxx.yyy.example.com这类多级子域名。
验证示例(假设证书包含*.example.com)
% openssl x509 -noout -in client-cert.pem -ext subjectAltName X509v3 Subject Alternative Name: DNS:*.example.com % openssl x509 -noout -in client-cert.pem -checkhost maps.example.com Hostname maps.example.com does match certificate % openssl x509 -noout -in client-cert.pem -checkhost '*.example.com' Hostname *.example.com does match certificate
内容的提问来源于stack exchange,提问作者Vikyboss
相关产品推荐
相关产品推荐

