正如我在answer到Hostname / IP doesn't match certificate's 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至IP address as hostname (CN) when creating a certificate? (HTTPS hostname wrong: should be <ipAddress>)所述,
不建议在证书中使用IP地址。
作为替代方案,建议在answer到How are SSL certificate server names resolved/Can I add alternative names using keytool?中将IP地址添加为SAN(在Node.js中可以使用)。
现在我的问题是:不推荐并不意味着错误或禁止。是否有任何具体原因,除了不推荐 Node.js不支持CN中的IP地址,或者为什么它会成为风险(安全,无论如何,......)如果它?
答案 0 :(得分:4)
该实施仅符合HTTPS specification:
在某些情况下,URI被指定为IP地址而不是a 主机名。在这种情况下,必须存在iPAddress subjectAltName 在证书中,必须与URI中的IP完全匹配。
当我在你引用的答案中说“不推荐”时,更多的是在使用HTTPS时一般使用IP地址。有些浏览器让你逃脱它,但我也引用了那里的规范,它确实使用了“必须”这个词。毋庸置疑,RFC比您在此处找到的任何答案更具权威性。