Google Chrome 中的 ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED

16
我有一个网站,使用SSL客户端证书授权。所有客户端证书都是使用OpenSSL生成的,并且是自签名的。一切正常,所有网络浏览器都可以工作,但推荐使用Google Chrome,因为它使用与IE相同的SSL仓库,所以证书安装非常容易(点击-点击-密码-完成!)。
在Google“Chrome 29.0.1547.57 m”的最新更新后,没有人可以访问我的Web服务器,即使是我也不行。
只有Google Chrome报错! IE和FF都能正常工作。
错误代码是:ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED。
服务器日志中也有同样的错误。
你有什么建议吗?
问题在于大多数客户不熟悉计算机,他们对这种情况非常恐慌。因此,电话支持人员正在接到大量来电。
6个回答

7
我们遇到了同样的问题。正如Sean所报告的那样,看起来Windows XP上的Chrome在协商TLSv1.2时,即使操作系统不支持SHA-2(比如SHA-256或SHA-384)哈希函数,也会协商成功。
我们发现,当Chrome在SERVER HELLO后接收到“客户端证书请求”时会失败。SERVER HELLO本身协商的是RC4-SHA1(在我们的环境中),这应该是可以成功的。有问题的数据包似乎是包含SHA-2(以及SHA1)哈希函数的“客户端证书请求”。
使用“--enable-logging --log-level=0”调用Chrome会输出以下消息: ERROR:nss_ssl_util.cc(193)] ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED: NSS error -12222, OS error -2146893816
这是与CryptSignHash函数对应的操作系统错误“NTE_BAD_ALGID”: http://msdn.microsoft.com/en-us/library/windows/desktop/aa380280(v=vs.85).aspx 在服务器上禁用TLSv1.2应该可以解决问题。但我认为Chrome应该在Windows XP上优先选择SHA1。

4
我这里也遇到同样的问题,Windows7客户端系统无法对某些系统进行客户端证书身份验证,但对另一些系统则没有问题。受影响的服务器运行Apache Tomcat,而未受影响的服务器运行IIS7,虽然我不确定这种差异是否是罪魁祸首。
还有其他人遇到这个问题吗?
编辑:
通过在服务器上禁用TLSv1.2,我能够消除问题。还有其他人能复现这个经验吗?
我也想知道是否有人在Windows平台之外的其他任何地方看到了这个问题,因为这里只有Windows平台会出现问题(相同版本的OSX没有问题)。
第二次编辑:
Chrome漏洞报告在这里:https://code.google.com/p/chromium/issues/detail?id=278370 第三次编辑:
最新版Chrome稳定版应该已经可以正常工作。 Chrome 30将有一个更强大的修复程序,但29.x现在也应该可以工作了。

2

我最近在Mac OS的Chrome浏览器中遇到了类似的问题。Firefox浏览器可以正常使用,但是在更改公司(AD)凭据后,Chrome和Safari浏览器开始出现故障--我猜测问题在于系统凭据与钥匙串凭据之间不匹配。

对我来说,解决方案是重置钥匙串访问权限中的私钥访问权限。

要进行重置:

  1. 在钥匙串访问应用程序中,右键单击每个失败的私钥,然后选择“获取信息”。
  2. 转到“访问控制”选项卡,并设置“允许所有应用程序访问此项目”--即使已经设置了该选项,请点击该选项。然后单击“保存更改”。
  3. 刷新失败的网站,您应该会被提示输入钥匙串密码--输入密码并选择“始终允许”。

0

谢谢@milang,但支持团队声称他们收到了一些关于Win7上出现此问题的报告。 - Alexey

0

问题是由Chrome在Windows XP上运行TLSv1.2引起的。

这可以在服务器端和客户端上禁用。

要使用较低版本的TLS运行Chrome,请使用命令行选项--ssl-version-max=tls1.1启动它。


0

我遇到了一个问题,就是通过proxy_wstunnel_module将Chrome与WebSockets连接到apache时出现了连接问题。

我的解决方案是配置httpd.conf文件。

ProxyPass /wss2/ ws://127.0.0.1:8080/  retry=0 keepalive=On
ProxyPassReverse /wss2/ ws://127.0.0.1:8080/  retry=0 
    <Location /wss2/>
        SSLRequireSSL On
        SSLVerifyClient none
        SSLVerifyDepth 1
        SSLOptions +StdEnvVars +StrictRequire
        SSLRenegBufferSize 10486000
    </Location>

Chrome WebSockets 不支持参数 SSLVerifyClient optional。

希望这可以帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接