我使用Keychain Access导入了我的my.foo.bar.com和yours.foo.bar.com,但Chrome仍然不接受它,提示我在每次浏览会话开始时进行验证 per domain .
证书是使用x509v3主题备用名称扩展名生成的,以验证多个域 . 如果我在导入证书之前导航到该站点,我会收到与导入后不同的警告消息 . 下面附有两个错误的图像(顶部是导入前的错误)
有没有办法接受自签名的多域证书?我只在Chrome中收到警告,顺便说一下 . FF和Safari工作得很好(除了那些浏览器很糟糕;))
更新:我尝试使用openssl cli和xca GUI生成证书
1 回答
问题是你试图使用太宽的通配符(
*
或*.com
) .规范(RFC 6125和RFC 2818 Section 3.1)谈论“最左侧”标签,这意味着应该有多个标签:
2.如果通配符是最左边的唯一字符
在提供的标识符中标签,客户端不应该比较
除了最左边的参考标签之外的任何东西
标识符(例如,* .example.com将匹配foo.example.com但是
不是bar.foo.example.com或example.com) .
我'm not sure whether there'是一个规范,说明应该有多少个最小标签,但Chromium code表示必须至少有2个点:
这确实是为了防止像
*.com
这样过于宽泛的案件 . 这可能看起来不方便,但CA偶尔会犯错误,并且有一个措施来防止发布的潜在流氓证书工作并不一定是坏事 . 如果我没记错的话,一些实现比这更进一步,并且列表域对于二级域也太宽泛(例如.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(尽管某些实现将更容忍) .