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

Mil*_*kov 1 ssl openssl

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

echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -subject -dates
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢。

Bob*_*Bob 5

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

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

证书有

    Subject: CN=*.example.com

    X509v3 Subject Alternative Name:
       DNS:*.example.com, DNS:example.com
Run Code Online (Sandbox Code Playgroud)

实际上相当于

    Subject: CN=example.com

    X509v3 Subject Alternative Name:
       DNS:example.com, DNS:*,example.com
Run Code Online (Sandbox Code Playgroud)

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

据我所知,既没有惯例也没有技术原因来选择上述选项之一而不是另一个,您可以期望看到这两个选项。您看到的内容取决于请求证书的管理员最初使用的选项。

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

    Subject: CN=example.NET

    X509v3 Subject Alternative Name:
       DNS:example.NET, DNS:*.example.NET, DNS:*.example.com, DNS:example.com
Run Code Online (Sandbox Code Playgroud)

在尚不支持该选项的旧版 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

  • 关于第一句话和相关示例,为此目的实际上已弃用 CN,所有名称都应位于 SAN 列表中。例如参见/sf/answers/2072047211/ (2认同)