如何从 PEM 文件中获取证书公用名

Ben*_*ird 5 ssl ssl-certificate certificate-authority

网上的各种文章让我相信服务器证书的通用名称必须与其有效的根 URL 完全匹配。但是,当我通过命令openssl x509 -inform PEM -in <certfile.pem> -text查看/etc/ssl/certs 中的一堆文件时,我发现 CN 值通常是人类可读的站点描述(例如“Google Internet Authority”),而不是域姓名。事实上,我在任何看起来像域名或 IP 地址的文件中都看不到任何内容,无论是在它们中还是在openssl s_client -connect <ip>.

那么,我对“通用名称”的理解不正确吗?如何从证书中检索 url,证书对其有效?

Eta*_*ner 1

是和不是。对于服务器证书,您是正确的(除了一些其他详细信息)。但是 /etc/ssl/certs 中的证书是中间证书和根 CA 证书,而不是服务器证书。也就是说,它们不直接用于服务器识别。因此,他们没有那种匹配的担忧。

服务器证书(服务器实际向客户端提供的证书)确实具有匹配问题,并且是您在连接时获得的第一个证书中看到的内容。如果您查看 openssl 构建链中的其他证书(并向您吐出),您将看到对 /etc/ssl/certs 样式证书的引用。

如果定义为合法匹配的替代字段之一匹配,则 CN 本身可能不匹配。为证书匹配添加其他有效名称的方法之一是使用带有 dNSName 类型的 subjectAltName 扩展,然后指定要匹配的有效名称(至少对于 HTTPS 目的)。还有其他一些用于其他目的。