为什么有些通配符证书在主题字段中有星号,而有些则没有?

为什么有些通配符证书在主题字段中有星号,而有些则没有?

我正在尝试解析 SSL 客户端的一些输出,以检查一组服务器是否具有有效证书。我正在查看此命令的输出:

echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -subject -dates

我注意到 Let's Encrypt 颁发的通配符证书仅在“主题”字段中列出“CN = example.com”,而其他 CA 颁发的通配符证书使用“CN = *.example.com”

这是正常的吗?在“主题”字段中,是否会有一些证书被列为“CN = example.com”,但它们不是通配符,如果我尝试打开“subdomain.example.com”,它们会在浏览器中崩溃?

或者是否有更好的方法来在命令行上验证证书是否适用于正确的域?

谢谢。

答案1

证书对于证书中包含的主题有效,但当有任何主题备用名称条目时,它对这些条目有效。

因此,将输出仅限openssl x509于主题是一个不确定的测试。

带有证书

    Subject: CN=*.example.com

    X509v3 Subject Alternative Name:
       DNS:*.example.com, DNS:example.com

实际上相当于

    Subject: CN=example.com

    X509v3 Subject Alternative Name:
       DNS:example.com, DNS:*,example.com

尽管主题只能列出一个名称,但两个证书对于裸域和子域通配符均有效。

据我所知,没有惯例或技术原因会偏向上述选项之一,您可以同时看到这两个选项。您看到的内容取决于请求证书的管理员最初使用的选项。

www.example.com当使用一个或多个完全不同的域名时,您在请求证书时通常会看到完全不同的主题:

    Subject: CN=example.NET

    X509v3 Subject Alternative Name:
       DNS:example.NET, DNS:*.example.NET, DNS:*.example.com, DNS:example.com

在旧版本的 openssl 中显示 SAN 条目并不是一件简单的事情,因为还不支持该-ext subjectAltName选项:https://stackoverflow.com/q/20983217

CN = example.com如果我尝试打开“subdomain.example.com”,那么在“主题”字段中列出的某些证书​​是否不是通配符,并且会在浏览器中中断?

的出现服务器名称指示 (SNI)意味着服务器不仅限于使用单个 TLS 证书,还可以配置多个证书,每个证书对不同的 DNS 名称、DNS 通配符和可能的 IP 地址有效。

事实上,当您使用 SNI 连接时https://www.example.net:443 会导致证书仅有效www.example.net(并且没有 SAN 条目),并不意味着对不同主机名的请求会导致错误。

除非您真正尝试,否则您不会事先知道使用其他名称的 SNI 请求连接到同一台服务器是否会导致证书错误。

如果服务器为 subdomain.example.net 配置了单独的附加有效证书,则在实际请求之前你不会知道https://subdomain.example.net:443

相关内容