为什么 Node.js 仅接受 SAN 证书中的 IP 地址,而不接受 CN 证书中的 IP 地址?

2023-12-29

正如我所指出的answer https://stackoverflow.com/a/14089295/1333873 to 主机名/IP 与证书的替代名称不匹配 https://stackoverflow.com/questions/14088787/hostname-ip-doesnt-match-certificates-altname/当请求的主机名作为证书的公用名 (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

如中所述answer https://stackoverflow.com/a/11710762/1333873 to 创建证书时将 IP 地址作为主机名 (CN)? (HTTPS 主机名错误:应为 ) https://stackoverflow.com/questions/11708717/ip-address-as-hostname-cn-when-creating-a-certificate-https-hostname-wrong,

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

作为替代方案,建议在answer https://stackoverflow.com/a/8444863/1333873 to SSL 证书服务器名称如何解析/我可以使用 keytool 添加备用名称吗? https://stackoverflow.com/questions/8443081/how-are-ssl-certificate-server-names-resolved-can-i-add-alternative-names-using添加 IP 地址作为 SAN(这又在 Node.js 中工作)。

现在我的问题是:不建议并不意味着wrong or 禁止的。除了是之外还有什么具体原因吗不建议Node.js 不支持 CN 中的 IP 地址,或者如果支持的话为什么会存在风险(安全性等)?


该实施仅符合HTTPS规范 https://www.rfc-editor.org/rfc/rfc2818#section-3.1:

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

当我在您引用的答案中说“不推荐”时,更多的是在使用 HTTPS 时一般使用 IP 地址。有些浏览器会让你摆脱它,但我也引用了那里的规范,它确实使用了“必须”这个词。不用说,RFC 比您在这里找到的任何答案都更权威。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Node.js 仅接受 SAN 证书中的 IP 地址,而不接受 CN 证书中的 IP 地址? 的相关文章

随机推荐