我已经使用Keychain Access导入了多个域名(例如my.foo.bar.com& yours.foo.bar.com)的自签名证书,但Chrome仍然不接受,提示我在每个浏览会话开始时进行验证每个域。
证书是使用x509v3 主题备用名称扩展名生成的,用于验证多个域。如果我导航到之前我导入证书,我会在导入后收到与不同的警告消息。下面附有两个错误的图像(顶部是导入前的错误)
有没有办法接受自签名的多域证书?我只在Chrome中收到警告,顺便说一下。 FF和Safari工作得很好(除了那些浏览器很糟糕;))
更新:我尝试使用openssl cli和xca GUI
生成证书答案 0 :(得分:5)
问题在于您尝试使用过宽的通配符(*
或*.com
)。
规范(RFC 6125和RFC 2818 Section 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 code表示必须至少有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.com
和yours.foo.bar.com
有效,但不对bar.com
有效。当没有SAN时,CN只是一个后备解决方案。如果有任何SAN,则应忽略CN(尽管某些实现将更容忍)。