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

Gol*_*den 5 ssl ssl-certificate node.js

正如我指出的回答主机名/ IP不匹配证书的备用名的Node.js并成功验证主机名的TLS证书时所请求的主机名作为证书的通用名称(CN).

Request    : localhost
Common Name: localhost
=> Success
Run Code Online (Sandbox Code Playgroud)

现在,当我为IP地址尝试相同时,验证失败:

Request    : 192.168.178.31
Common Name: 192.168.178.31
=> Fail
Run Code Online (Sandbox Code Playgroud)

它仅在我将IP地址指定为主题备用名称(SAN)时才有效:

Request                 : 192.168.178.31
Common Name             : 192.168.178.31
Subject Alternative Name: 192.168.178.31
=> Success
Run Code Online (Sandbox Code Playgroud)

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

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

作为替代方案,建议在回答SSL证书服务器名称是如何解决的/可使用密钥工具我补充替代名称?将IP地址添加为SAN(在Node.js中可以使用).

现在我的问题是:不推荐并不意味着错误禁止.是否有除了被任何具体的原因,不建议其导入Node.js不支持IP地址的中枢神经系统,或者为什么它会是一个风险(安全,什么的,......),如果它做?

Bru*_*uno 4

该实现仅符合HTTPS 规范

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

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