我将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中。
答案 0 :(得分:3)
问题是Firefox不支持TLS 1.3握手后身份验证。我已通过https://bugzilla.mozilla.org/show_bug.cgi?id=1511989
向Firefox报告了此问题我不是在这里建议解决方法或修复;我只是告诉其他访问该页面的人(在搜索结果中此错误消息的出现率很高),这是什么情况,以及在Firefox致力于解决此问题时在哪里可以找到最新信息。
答案 1 :(得分:2)
如果这对其他人有帮助,那么对于我在Windows上使用 Apache HTTP 2.4.41 进行的反向代理测试配置,我只想通过客户端保护 balancer-manager URI 我使用 OpenSSL 和CA证书,由CA签名的服务器证书和由CA签名的客户端证书生成的证书身份验证,将P12导入了我的浏览器。
对于要代理的其他后端URL(启用AJP的Spring Boot并在2个不同的端口集上运行相同的应用程序以通过Apache HTTP测试平衡),配置将不执行任何客户端证书身份验证。
禁止访问您无权访问此资源。原因: 无法执行握手后身份验证。
在Apache错误日志中,它显示:
SSL库错误:错误:14268117:SSL 例程:SSL_verify_client_post_handshake:未收到扩展名
在Apache访问日志中,它显示:
获取/ balancer-manager HTTP / 1.1“ 403199
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
另请参阅这些链接
我使用TLS 1.2进行测试(TLS 1.1也可以使用,但建议使用TLS 1.2或更高版本)。
注意: Apache 2.4.38或更高版本支持TLS v1.3。您 必须在SSL设置中启用TLS 1.3之前升级Apache软件包。。
*
答案 2 :(得分:0)
这对我有用!
使用以下命令打开Linux目录
sudo nautilus
然后导航至
/etc/apache2/mods-enabled/ssl.conf
打开ssl.conf,您会找到类似的东西
#要启用的协议。
#可用值:全部,SSLv3,TLSv1,TLSv1.1,TLSv1.2
不再支持#SSL v2
SSLProtocol all -SSLv3
只需将TLSv1.3替换为SSLv3,如下所示:
SSLProtocol all -TLSv1.3
然后使用以下命令重启apache服务器
sudo service apache2 restart
它将正常工作。