在线的各种文章让我相信,服务器证书的通用名称必须与其有效的根URL完全匹配。 但是,当我查看/ etc / ssl / certs中的一堆文件时,通过命令openssl x509 -inform PEM -in <certfile.pem> -text ,我看到CN值通常是人类可读的描述该网站(例如“Google互联网pipe理局”),而不是一个域名。 实际上,我看不到任何类似于域名或IP地址的文件,无论是在openssl s_client -connect <ip>的输出中。
那么,我对“通用名称”的理解是不正确的? 如何从证书中获取证书的url?
是和不是。 你是正确的(除了一些额外的细节)的服务器证书。 但是/ etc / ssl / certs中的证书是中间和根CA证书,而不是服务器证书。 也就是说,它们不直接用于服务器识别。 因此,他们没有这种匹配的关注。
服务器证书(服务器实际提供给客户端的服务器证书)确实具有匹配的关注点,并且是您在连接时获得的第一个证书中看到的内容。 如果您查看openssl构build的其他证书(并向您吐出),您将看到对/ etc / ssl / certs证书样式的引用。
如果其中一个替代字段被定义为合法匹配,则CN本身可能不匹配。 在为证书匹配添加附加有效名称的方法中,使用了带有dNSNametypes的subjectAltName扩展,然后指定要匹配的有效名称(至less为了HTTPS的目的)。 还有其他的用于其他目的。