SSL / TLS证书中的IP地址通配符

问题描述

用于保护网站安全的SSL / TLS证书允许指定子域通配符:

是否可以对IP地址使用通配符?特别是,我想要这样的本地开发SSL证书:

  • 192.168.1.*,它将对我的WiFi路由器的NAT网络内部可访问的256个不同IP地址中的任何一个有效。

我不仅希望使用localhost127.0.0.10.0.0.0::1作为证书的备用名称,还希望能够连接手机进行测试我的网站的开发版本,可以在192.168.1.40上找到。但是随后,同一证书无法从其他开发机器上重复使用-因为它将在同一网络上获得不同的IP。


我们的加密不支持使用IP地址-这意味着我将改为使用自签名或本地信任的证书。

解决方法

不。 RFC 2818 section 3.1指定dNSName项目的通配符匹配;尽管此处不清楚,但普遍实现了此功能,以允许仅将通配符用作最左边的DNS标签,这是最不重要的,因为DNS名称是从右到左的。它指定如果使用iPAddress,则匹配必须是精确的(无通配符),并且即使允许通配符也是如此,因为IP地址是从左到右的,因此只有右侧的通配符(如您建议的通配符)才有用。

但是,如果您像大多数人一样仅使用/ 24的192.168.x.0或更小值,并且可能只使用该范围内的某些地址,那么不难列出所有需要的地址在证书中。例如,如果您使用的是 DHCP分配的地址,则这些地址通常仅占网络掩码名义上可用范围的一半或更少。

在CA / Browser论坛规则下运行的CA,因此为主要浏览器所接受,将为私有(RFC 1918)地址颁发证书;请参见https://wwww.cabforum.org上的基准要求。出于相同的原因,他们也不会像.local .localdomain .dev .test那样使用本地或“假”域名。

BTW 127.0.0.1和:: 1是真实地址,尽管不可路由,因此只能在本地使用。 0.0.0.0和:: 0不同;它们根本不是地址,您不能connect()给他们;实际上,它们用于表示未连接的状态。您可以bind()中使用它们,但这实际上意味着绑定到所有配置的地址(和接口)。