我用过本指南在 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 未实现它的原因相同。
我认为您可以做的是将设置为SSLVerifyClient
,optional
将其移动到VirtualHost
级别(使用任何SSL*
指令,因此在握手期间将请求证书),并要求文件中存在证书,.htaccess
如下所示:
AuthName "Admin resource"
AuthType Basic
Require ssl-verify-client