还是证书既是主机特定的又是端口特定的(通配符证书除外)?
我认为它们不是,因为它们应该验证域,但与此同时,我从未见过有人在 443 以外的任何端口上运行 HTTPS,而且我只看到过使用的 X.509 证书与 HTTPS 结合使用,因此尽管答案可能是“否”,但我还是想检查一下。
还是证书既是主机特定的又是端口特定的(通配符证书除外)?
我认为它们不是,因为它们应该验证域,但与此同时,我从未见过有人在 443 以外的任何端口上运行 HTTPS,而且我只看到过使用的 X.509 证书与 HTTPS 结合使用,因此尽管答案可能是“否”,但我还是想检查一下。
理论上你可以在证书中放任何你想要的东西;例如,这个证书实际上包含一个视频文件作为“Subject Alt Name”(令人惊讶的是,Windows 解码 1.2 MB 证书没有问题——但它不显示视频,唉)。但是,在实践中,“用于 SSL”的证书仅包含预期的服务器名称,如RFC 2818中所指定. 客户端(Web 浏览器)将验证 URL 中的名称是否确实出现在证书中应该出现的位置。没有在证书中存储端口号的标准,也没有客户端会验证该端口号的存在,因此,简而言之:证书不是特定于端口的。证书操纵和体现的“身份”概念不包括“端口”的概念。
如果您需要证书的指纹并且在不同的端口上使用不同的哈希值并且您需要在两者上都使用 SSL,这似乎很重要。我不太清楚为什么会这样,但是在 90 天的证书生命周期内,我一直不得不修补我的 fetchmail 配置,直到我弄清楚如何让它来验证完整的信任链。
rich@mars:~$ echo | openssl s_client -connect subdomain.example.net:993 -showcerts | openssl x509 -fingerprint -noout -md5
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify error:num=20:unable to get local issuer certificate
verify return:0
DONE
MD5 Fingerprint=D6:2F:CD:EF:D3:26:5A:B5:15:24:E5:55:1F:99:B8:B9
rich@mars:~$ echo | openssl s_client -connect subdomain.example.net:443 -showcerts | openssl x509 -fingerprint -noout -md5
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify error:num=20:unable to get local issuer certificate
verify return:0
DONE
MD5 Fingerprint=7C:3B:53:41:55:43:F7:B6:F5:BE:C9:8F:E3:CD:BD:A1