我正在尝试解析来自 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”会在浏览器中中断?
或者是否有更好的方法来验证证书是否适用于命令行上的正确域?
谢谢。
证书对证书中包含的 Subject 有效,但是当有任何 Subject Alternative Name 条目时,它对那些有效。
因此,将
openssl x509
输出仅限于主题是一个不确定的测试。有证书
等效于
尽管主题只能列出一个名称,但两个证书对裸域和子域通配符都有效。
据我所知,既没有惯例也没有技术上的理由来选择上述选项中的一个而不是另一个,您可以期望看到两者。您看到的内容取决于请求证书的管理员最初使用的选项。
www.example.com
当同时使用一个或多个完全不同的域名时,您通常甚至会在请求证书时看到完全不同的主题:-ext subjectAltName
在还不支持该选项的旧版本 openssl 中显示 SAN 条目并非完全简单: https ://stackoverflow.com/q/20983217服务器名称指示 (SNI)的出现意味着服务器不仅限于使用单个 TLS 证书,还可以配置多个证书,每个证书对不同的 DNS 名称、DNS 通配符和可能的 IP 地址有效。
当您使用 SNI 连接时,
https://www.example.net:443
证书仅对www.example.net
(并且没有 SAN 条目)有效,这一事实并不意味着对不同主机名的请求将导致错误。在您实际尝试之前,您不会事先知道使用其他名称的 SNI 请求连接到同一服务器是否会导致证书错误。
如果服务器为 subdomain.example.net 配置了单独的附加且有效的证书,则在您实际请求之前您不会知道
https://subdomain.example.net:443