0

我在尝试启用 SSLVerifyClient 时遇到问题,因此用户可以使用浏览器上安装的证书进行访问。

我已经创建了 CA、证书、密钥和一切。在我的 Apache conf 上,我有这个:

<VirtualHost *:443>
    DocumentRoot "C:\xampp\htdocs\web.es"
    ServerName web.es
    ServerAlias web.es
    SSLEngine on 
    SSLCertificateFile "conf/ssl.crt/cert.crt" 
    SSLCertificateKeyFile "conf/ssl.key/private.key"
    SSLCACertificateFile "conf/ssl.crt/ca.crt"
    #SSLProtocol -all +TLSv1.2
    <LocationMatch ^/cert_test$>
        SSLVerifyClient require
        SSLVerifyDepth 10
        SSLOptions +StdEnvVars
    </LocationMatch>
</VirtualHost>

我有“LocationMatch”,因为我只想要那里的证书。

这里的日志:

[2021 年 1 月 13 日星期三 12:25:18.705565] [ssl:error] [pid 10148:tid 1832] [client 127.0.0.1:50913] AH10158: 无法执行握手后身份验证

[2021 年 1 月 13 日星期三 12:25:18.705565] [ssl:error] [pid 10148:tid 1832] SSL 库错误:错误:14268117:SSL 例程:SSL_verify_client_post_handshake:未收到扩展

问题是,我已经搜索了好几天,今天我发现问题出在 TLS 1.3 上。如果我取消注释SSLProtocol -all +TLSv1.2行(必须在 LocationMatch 之外,否则 Apache 甚至无法启动,我已经测试过了),Apache 将使用 TLS 1.2,然后一切正常。浏览器要求提供证书,然后选择有效的证书,我被允许访问该页面。如果我使用 TLS 1.3(默认选项),我总是获得“禁止访问。您无权访问此资源。原因:无法执行握手后身份验证”。

我一直在寻找几个小时,但我找不到解决方案。我唯一发现的是,在 Firefox 中,about:config 启用了security.tls.enable_post_handshake_auth。对于基于 Chromium 的浏览器,结果是一样的,但我找不到像 Firefox 那样的“deeper-conf”解决方案。无论如何,这不会是一个解决方案。

版本在这里:Apache/2.4.46 (Win64) - OpenSSL/1.1.1g - PHP/7.4.10 - 端口 443

我的配置有问题还是 TLS 有问题?

谢谢你。

编辑:正如@Steffen Ullrich 在下面的评论中所说,浏览器尚不支持此功能(在 Firefox 中,但仅在 about:config 中启用了一个选项,这不是用户友好的,也不是一个选项,至少不适合我)。如果有人和我有同样的问题,那么在 2021 年 1 月 14 日那天是没有办法的。

4

0 回答 0