在 Apache 上设置客户端证书身份验证后,Chrome 不会提示使用本地证书

在 Apache 上设置客户端证书身份验证后,Chrome 不会提示使用本地证书

我用过本指南在 Apache 上设置客户端证书认证。

我使用openssl verify指令验证了我的证书(它是有效的),我还成功将 PFX 文件导入我的 macOS 钥匙串并将其设置为“始终信任”。

另外,我在我的网站目录中创建了一个新.htaccess文档,并在其中填充了两行内容:/admin

SSLVerifyClient require
SSLVerifyDepth 10

这个想法当然是通过客户端证书来限制对管理面板的访问。

现在,当我/admin在 Chrome 中访问我的页面时,出现以下信息: 在此处输入图片描述

那么,事情似乎可以正常工作。问题是,浏览器不会以任何方式提示我提供我在 Keychain 中导入的本地证书,这使我无法实际访问资源/admin

我错过了什么?

答案1

Chrome 不支持后握手身份验证,即在连接已建立时重新协商 SSL 并发送客户端证书,因为(来自 Chrome 错误报告页面)

握手后身份验证存在大量的安全性、语义和 DoS 问题。(...) 需要进行一些规范工作才能使其在 HTTP/1.1 中定义,更重要的是,在 HTTP/2 中明确取消定义,以支持多路复用友好的解决方案 (...)

在 Firefox 中,您可以打开它,但默认情况下它未启用,因为 Chrome 未实现它的原因相同。

您可以查看错误报告(火狐铬合金) 了解更多信息。

我认为您可以做的是将设置为SSLVerifyClientoptional将其移动到VirtualHost级别(使用任何SSL*指令,因此在握手期间将请求证书),并要求文件中存在证书,.htaccess如下所示:

AuthName "Admin resource"
AuthType Basic
Require ssl-verify-client

相关内容