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

标签 node.js ssl ssl-certificate

正如我在 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>) ,

using IP address in certificates is not recommended [...].

作为替代方案,建议在 answerHow are SSL certificate server names resolved/Can I add alternative names using keytool?将 IP 地址添加为 SAN(这反过来在 Node.js 中有效)。

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

最佳答案

实现仅符合 HTTPS specification :

In some cases, the URI is specified as an IP address rather than a hostname. In this case, the iPAddress subjectAltName must be present in the certificate and must exactly match the IP in the URI.

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

关于node.js - 为什么 Node.js 只接受 SAN 证书中的 IP 地址,CN 不接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14089872/

相关文章:

node.js - 为 Telegram、Facebook、Slack 等平台定制有效负载,用于 Nodejs 中的 DialogFlow

node.js - 如何在没有互联网连接的系统中管理 npm 安装

javascript - 如何在 Electron.js 中保存在 Canvas 上绘制的图像

security - 为什么将 localhost 添加到 SAN 列表被视为不安全?

ubuntu - 此站点无法提供安全连接 ERR_SSL_PROTOCOL_ERROR

wordpress - 我网站的 https 被划掉了

java - 如何使我编写的代理服务器充当 HTTPS 服务器?

java - 证书在不同的机器上显示不同的证书链

ssl - 错误 : AWS CLI SSH Certificate Verify Failed _ssl. c:581

javascript - Gulpfile.js 加载失败