无法在 Windows 10 上的 Chrome 或 IE 中使用客户端证书

kli*_*ron 5 google-chrome certificate ssl windows-10

我有一个 nginx 安装和一个自签名 CA,我希望我的用户使用该 CA 签名的客户端证书进行身份验证。

在 Linux 中,Firefox 和 Chrome 都能完美运行。在 Windows 10 上,Firefox 运行良好。所以我知道这不是服务器、系统时钟或证书本身的配置错误。

我通过运行 certmgr.msc 导入证书。我将客户端证书存储在“个人”存储中,将 CA 的证书存储在“受信任的根证书颁发机构”中。然后我通过重新启动chrome chrome://restart,甚至重新启动Windows也无济于事。

在我收到有关服务器证书真实性未得到验证的(预期)警告后,在 Linux 和 Windows 中的 Firefox 上,我可以选择“仍然继续”。在 Windows Chrome 和 IE 上,我没有这样的选项。Chrome 显示以下屏幕:

在此输入图像描述

我正在使用 Chrome v56(64 位)

有什么办法可以解决我不知道的这个问题吗?为什么 Chrome 取消了在 Windows 上继续进行的选项,但该选项在其他操作系统上仍然存在?

编辑

在 MacOS 上,Chrome 的行为与 Linux 上类似。将证书导入用户的钥匙串后,我会看到相同的警告和“仍然继续”的选项。

我不知道这是 Chrome 的问题还是 Windows 强制执行的一些安全限制,但我发现它非常不切实际且烦人。

kli*_*ron 5

如果有人遇到同样的问题,这里是解决方案,它应该适用于 Windows 7、8 和 10。

  1. 创建 Windows 管理控制台文件。Start -> Run -> mmc.exe

  2. 在控制台窗口中:File -> Add/Remove Snap-in...

  3. 选择Certificates管理单元并My user account在下一个窗口中选择管理证书。

  4. 返回对话框Add or Remove Snap-ins,选择组策略对象编辑器并将其添加到控制台根目录。在下一个对话框中保留Group Policy Object设置,然后单击“完成”。LocalComputer

  5. 单击“确定”离开Add or Remove Snap-ins对话框。

此时您应该看到如下所示的控制台窗口:

在此输入图像描述

现在,导入您的证书。

  1. 展开Certificates管理单元并单击Personal。然后右键单击中间窗格并选择All Tasks -> Import...。将出现证书导入向导。只需导入用户的证书,无需更改任何默认设置。

  2. 展开Trusted Root Certification Authorities并单击Certificates。再次单击中间窗格并选择All Tasks -> Import...。导入 CA 的证书而不更改任何默认设置。

现在到有趣的部分......

返回到Console Root,在Local Computer Policy管理单元下导航至Computer Configuration-> Windows Settings-> Security Settings-> Public Key Policies。您应该看到这样的窗口:

在此输入图像描述

双击Certificate Path Validation Settings。检查Define these policy settings并选择设置,如下图所示。

在此输入图像描述

然后,单击Select Certificate Purposes并确保包含您的预期目的(客户端身份验证和服务器身份验证是我需要的。)。单击Apply并关闭控制台窗口。系统会询问您是否要保存设置。如果您想保存配置供其他人重复使用,您可以选择这样做。

确保重新启动 Chrome 或 IE 以使更改生效。