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

正如我在答复 主机名/ IP时指出的, 与证书的名称不匹配,当请求的主机名被指定为证书的公用名称(CN)时,Node.js会成功validation主机名上的TLS证书。

Request : localhost Common Name: localhost => Success 

现在,当我尝试使用相同的IP地址时,validation失败:

 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 

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

不build议在证书中使用IP地址[…]。

作为替代scheme,在解决SSL证书服务器名称的方式/我可以使用keytool添加替代名称的答案中build议使用? 将IP地址添加为SAN(这反过来在Node.js中工作)。

现在我的问题是: 不build议不意味着错误禁止 。 除了不build议 Node.js不支持CN中的IP地址,或者为什么它会是一个风险(安全,无论…),还有什么特别的原因吗?

该实现仅仅符合HTTPS规范 :

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

当我在你引用的答案中表示“不推荐”时,更多的是在使用HTTPS时使用IP地址。 一些浏览器让你摆脱它,但我也引用了规范,它使用了“must”一词。 不用说RFC比任何你会发现在这里的答案更权威。