2

我已经使用 Keychain Access 导入了多个域的自签名证书(比如说 my.foo.bar.com 和 yours.foo.bar.com),但 Chrome 仍然不接受它,提示我在每个域的每个浏览会话开始时进行验证。

证书是使用 x509v3主题备用名称扩展生成的,以验证多个域。如果我在导入证书之前导航到该站点,我会收到与导入不同的警告消息。下面附上两个错误的图像(顶部是导入前的错误)

在此处输入图像描述

有没有办法接受自签名的多域证书?顺便说一句,我只在 Chrome 中收到警告。FF 和 Safari 工作得很好(除了那些浏览器很烂;))

更新:我尝试使用 openssl cli 和xca GUI生成证书

4

1 回答 1

5

问题是您尝试使用过于宽泛的通配符(**.com)。

规范(RFC 6125RFC 2818 第 3.1 节)谈论“最左边”标签,这意味着应该有多个标签:

 1.  The client SHOULD NOT attempt to match a presented identifier in
     which the wildcard character comprises a label other than the
     left-most label (e.g., do not match bar.*.example.net).

 2.  If the wildcard character is the only character of the left-most
     label in the presented identifier, the client SHOULD NOT compare
     against anything but the left-most label of the reference
     identifier (e.g., *.example.com would match foo.example.com but
     not bar.foo.example.com or example.com).

我不确定是否有规范说明应该有多少个最小标签,但Chromium 代码表明必须至少有 2 个点:

我们需要至少 3 个组件(即 2 个点)作为防止过于宽泛的通配符的基本保护。

这确实是为了防止像*.com. 这可能看起来不方便,但 CA 偶尔会犯错误,并且采取措施防止潜在的流氓证书颁发*.com给工作并不一定是坏事。如果我没记错的话,一些实现比这更进一步,并且有一个列表域,对于二级域来说也太宽泛了(例如.co.uk)。

关于您的第二个示例:“ CN:bar.com, SANs: DNS:my.foo.bar.com, DNS:yours.foo.bar.com ”。此证书应有效my.foo.bar.comyours.foo.bar.com但无效bar.com。当没有 SAN 时,CN 只是一种备用解决方案。如果有任何 SAN,则应忽略 CN(尽管某些实现会更宽容)。

于 2013-04-09T23:20:33.197 回答