5

正如我在对主机名/IP 与证书的替代名不匹配的回答中指出的那样,当请求的主机名作为证书的公用名 (CN) 给出时,Node.js 确实成功地验证了主机名上的 TLS 证书。

Request    : localhost
Common Name: localhost
=> Success

现在,当我尝试对 IP 地址进行相同操作时,验证失败:

Request    : 192.168.178.31
Common Name: 192.168.178.31
=> Fail

仅当我将 IP 地址指定为主题备用名称 (SAN) 时才有效:

Request                 : 192.168.178.31
Common Name             : 192.168.178.31
Subject Alternative Name: 192.168.178.31
=> Success

创建证书时IP地址作为主机名(CN)的答案中所述?(HTTPS 主机名错误:应该是 <ipAddress>) ,

不建议在证书中使用 IP 地址 [...]。

作为替代方案,在如何解决 SSL 证书服务器名称/我可以使用 keytool 添加替代名称的答案中建议使用它吗?将 IP 地址添加为 SAN(这又在 Node.js 中工作)。

现在我的问题是:不推荐并不意味着错误禁止。除了不建议Node.js 不支持 CN 中的 IP 地址之外,是否有任何具体原因,或者为什么如果这样做会带来风险(安全性,无论如何,......)?

4

1 回答 1

4

该实现仅符合HTTPS 规范

在某些情况下,URI 被指定为 IP 地址而不是主机名。在这种情况下,iPAddress subjectAltName 必须出现在证书中,并且必须与 URI 中的 IP 完全匹配。

当我在您引用的答案中说“不推荐”时,更多的是在使用 HTTPS 时使用 IP 地址。一些浏览器让你侥幸逃脱,但我也引用了那里的规范,它确实使用了“必须”这个词。毋庸置疑,RFC 比您在此处找到的任何答案都更具权威性。

于 2012-12-30T11:39:30.353 回答