正如我所指出的answer https://stackoverflow.com/a/14089295/1333873 to 主机名/IP 与证书的替代名称不匹配 https://stackoverflow.com/questions/14088787/hostname-ip-doesnt-match-certificates-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 https://stackoverflow.com/a/11710762/1333873 to 创建证书时将 IP 地址作为主机名 (CN)? (HTTPS 主机名错误:应为 ) https://stackoverflow.com/questions/11708717/ip-address-as-hostname-cn-when-creating-a-certificate-https-hostname-wrong,
不建议在证书中使用 IP 地址 [...]。
作为替代方案,建议在answer https://stackoverflow.com/a/8444863/1333873 to SSL 证书服务器名称如何解析/我可以使用 keytool 添加备用名称吗? https://stackoverflow.com/questions/8443081/how-are-ssl-certificate-server-names-resolved-can-i-add-alternative-names-using添加 IP 地址作为 SAN(这又在 Node.js 中工作)。
现在我的问题是:不建议并不意味着wrong or 禁止的。除了是之外还有什么具体原因吗不建议Node.js 不支持 CN 中的 IP 地址,或者如果支持的话为什么会存在风险(安全性等)?