8

我将 apache 更新到最新版本 2.4.37 并将 openssl 更新到 1.1.1,现在,当客户端进行身份验证时,我只在 Firefox 63 中收到此错误,但在 Chrome 中没有:

[ssl:error] AH: verify client post handshake, referer: https://******/login
[ssl:error] AH10158: cannot perform post-handshake authentication, referer: https://******/login
[ssl:error]SSL Library Error: error:14268117:SSL routines:SSL_verify_client_post_handshake:extension not received

我使用wireshark 试图找出问题所在,我知道Firefox 使用TLS 1.3,而Chrome 使用TLS 1.2。事实上,如果我将 FF 中的 TLS 最大版本设置为 TLS 1.2,它就可以正常工作。

我想获得 TLS 1.3 兼容性,或者,如果还不可能,强制在我的 Apache 配置中,客户端始终使用 TLS 1.2,但我不明白:(

这是我的 apache vhost 配置文件:

[...]

SSLEngine on
SSLCertificateFile      /etc/apache2/ssl/server.crt
SSLCertificateKeyFile   /etc/apache2/ssl/server.key
SSLCertificateChainFile /etc/apache2/ssl/intermediate.crt
SSLCACertificateFile /etc/apache2/ssl/ca.pem
SSLVerifyDepth 3
SSLProtocol TLSv1.2
SSLHonorCipherOrder on

<Directory /var/www/html/>
    Options -Indexes +FollowSymLinks -MultiViews
    AllowOverride All
    Order deny,allow
    Allow from 10.55.12.0/24
    Deny from all
</Directory>

<Files "login-ssl.php">
    SSLVerifyClient optional
    SSLOptions +StdEnvVars +StrictRequire
</Files>

[...]

有人能帮助我吗?

谢谢。


已编辑

我找到了解决方案。SSLProtocol 指令应该在 /etc/apache2/mods-enabled/ssl.conf 中。

4

2 回答 2

7

问题是 Firefox 不支持 TLS 1.3 握手后身份验证。我已经在https://bugzilla.mozilla.org/show_bug.cgi?id=1511989向 Firefox 报告了这个问题

我不是在这里建议解决方法或修复;我只是告诉其他看到此页面的人(因为在搜索结果中此错误消息的位置很高)是什么情况以及在哪里可以找到最新信息,因为 Firefox 正在努力解决这个问题。

于 2018-12-03T17:54:12.877 回答
4

如果这对其他人有帮助,对于我在 Windows 上使用 Apache HTTP 2.4.41 的反向代理测试配置,我只想保护带有客户端证书身份验证的balancer-manager URI ,这是我使用OpenSSL和 CA 证书生成的,服务器证书由CA 和 CA 签名的客户端证书,在我的浏览器中导入了 P12。

对于我正在代理的其他后端 URL(启用了 AJP 的 Spring Boot 并在 2 个不同的端口集上运行相同的应用程序以通过 Apache HTTP 测试平衡),配置是不执行任何客户端证书身份验证。

  1. 访问https://myhostname.com正在工作并通过平衡器访问我的后端,返回预期的响应。
  2. 访问https://myhostname.com/balancer-manager预计会提示我选择我之前导入的客户端证书,但在 Chrome 80.0 上出现此错误(并且不适用于其他浏览器)。

Forbidden 您无权访问此资源。原因:无法执行握手后身份验证。

在 Apache 错误日志中,它显示:

SSL 库错误:错误:14268117:SSL 例程:SSL_verify_client_post_handshake:未收到扩展

在 Apache 访问日志中,它显示:

获取 /balancer-manager HTTP/1.1" 403 199

httpd.conf中虚拟主机配置的非工作配置如下所示:

<VirtualHost *:443>

    ServerName myhostname.com
    ServerAlias myhostname.com

    SSLEngine on
    SSLCipherSuite ALL:!EXP:!eNULL:!aNULL:!MD5:-LOW:-RC4:-SSLv2:+HIGH:+MEDIUM

    #no certificate authentication required except balancer manager
    SSLVerifyClient none
    SSLVerifyDepth 5
    SSLProtocol all -SSLv3
    SSLCertificateFile "path/to/server/certificate"
    SSLCertificateKeyFile "path/to/server/key"
    SSLCACertificateFile "path/to/CA/certificate"

    <Location "/balancer-manager">
            SSLVerifyClient require
            SetHandler balancer-manager
            Require host myhostname.com
    </Location>


    <Proxy balancer://cluster>
        BalancerMember  ajp://localhost:9090/ loadfactor=25 timeout=1
        BalancerMember  ajp://localhost:9091/ loadfactor=75 timeout=1
        ProxySet lbmethod=byrequests
    </Proxy>

    ProxyPreserveHost off

    ProxyRequests Off
    ProxyPass         /  balancer://cluster/  stickysession=JSESSIONID
    ProxyPassReverse  /  balancer://cluster/  stickysession=JSESSIONID

</VirtualHost>

要解决此问题,请将 SSLProtocol指令更改为使用:

SSLProtocol -all +TLSv1.2

另请参阅这些链接

  1. 在 Apache 中启用 TLS

  2. TLS-1-2

我使用 TLS 1.2 进行测试(TLS 1.1 也可以,但建议使用 TLS 1.2 或更高版本)。

注意:Apache 版本 2.4.38 或更高版本支持 TLS v1.3。在 SSL 设置中启用 TLS 1.3 之前,您必须升级 Apache 包

*

于 2020-03-05T10:22:15.173 回答