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

时间:2012-12-30 10:14:06

标签: node.js ssl ssl-certificate

正如我在answerHostname / 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

answerIP address as hostname (CN) when creating a certificate? (HTTPS hostname wrong: should be <ipAddress>)所述,

  

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

作为替代方案,建议在answerHow are SSL certificate server names resolved/Can I add alternative names using keytool?中将IP地址添加为SAN(在Node.js中可以使用)。

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

1 个答案:

答案 0 :(得分:4)

该实施仅符合HTTPS specification

  

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

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

相关问题