我有一个 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 强制执行的一些安全限制,但我发现它极其不切实际且烦人。
答案1
如果有人遇到同样的问题,这里有解决方案,它应该适用于 Windows 7、8 和 10。
创建一个 Windows 管理控制台文件。
Start -> Run -> mmc.exe
在控制台窗口中:
File -> Add/Remove Snap-in...
选择
Certificates
管理单元并My user account
在下一个窗口中选择管理证书。返回
Add or Remove Snap-ins
对话框,选择“组策略对象编辑器”并将其添加到控制台根目录。在下一个对话框中保留Group Policy Object
设置为,然后单击“完成”。LocalComputer
单击“确定”退出
Add or Remove Snap-ins
对话框。
此时您应该看到如下控制台窗口:
现在,导入您的证书。
展开
Certificates
管理单元并单击Personal
。然后右键单击中间窗格并选择All Tasks -> Import...
。将出现证书导入向导。只需导入用户的证书,而无需更改任何默认设置。展开
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,以使更改生效。
答案2
chrome://restart
对我有用。感谢您在问题中提到这一点。
客户端证书突然对我来说停止工作了,但这一定是由于与这个问题不同的原因,因为您必须导入和配置证书。