是否允许将 IP 指定为 SAN 证书的 DNS 名称?
SubjectAltName 中的 IP 地址
是否允许将 IP 指定为 SAN 证书的 DNS 名称?
根据RFC 5280 dNSName 是一个 IA5String ,这意味着理论上您可以将 IPv4 或 IPv6 地址的字符串作为字符串放入其中。有时即使 SAN 中 IP 地址的正确类型是 iPAddress 也是必要的,因为:
- MSIE 和 MS Edge 倾向于忽略 iPAddress 并期望将值作为 dNSName 中的字符串。Python 2 也是如此。
- 但是 Chrome、Safari、Firefox 不希望 IP 地址为 dNSName,而是需要它作为 iPAddress。Python 3 也是如此。
因此,实际上可以通过将 IP 地址同时指定为 iPAddress 和 dNSName 来实现最佳兼容性。
是否允许将 IP 指定为 SAN 证书的 DNS 名称?
首先,您应该意识到有一个特定的 iPAddress 替代名称格式,旨在保存点分四边形 (IPv4) 或 16 个八位字节 (IPv6)。如果您希望在证书上加上 IP 地址,那可能是正确的做法。请参阅RFC 5280 第 4.2.1.6 节。浏览器/客户端兼容性会有所不同。
其次,是的,在 SAN 的 dNSName 字段中指定虚线四边形是合法的。引用 RFC 5280,
名称必须采用“首选名称语法”,由 RFC1034 的第 3.5 节指定并由RFC1123的第 2.1 节修改
后者建议软件应该容忍在“主机名”字段中查找 IP 地址:
每当用户输入 Internet 主机的身份时,应该可以输入 (1) 主机域名或 (2) 点分十进制 ("#.#.#.#") 形式的 IP 地址。在域名系统中查找之前,主机应该在语法上检查字符串中的点分十进制数字。
同样,这些只是 RFC,因此您的里程会因客户而异。
另请注意,根据 RFC 5280:
因为主体替代名称被认为与公钥明确绑定,所以主体替代名称的所有部分必须由 CA 验证。
因此,如果您使用例如私有 RFC 1918 IP 地址 (10.1.2.3) 向公共 CA 提交请求,他们应该拒绝签署该请求。至于验证 IP 地址所有权的 CA——当 IP 地址的“所有权”通常与分配的用户不同时——事情可能会变得有趣。
是的,从技术上讲,它可以与任何域名一起进入主题备用名称 (SAN)。您使用证书的系统可能会或可能不会正确使用信息(取决于应用程序)。
因此,是的,做你想做的事是合法的,但它可能行不通。
是的,它可以这样使用,但它通常只对私钥基础设施有意义。在这种情况下,您可以拥有一个将直接使用其 IP 地址的私有服务器,因此在 SAN 字段中使用它是有意义的。
但是 AFAIK 很少用于公共 PKI 和公共服务器(如果有的话)。