Apache httpd代理后端HTTPS服务仍用TLSv1,如何强制使用TLSv1.2?
Apache代理后端HTTPS强制使用TLSv1.2而非TLSv1的问题解决
问题概述
配置Apache httpd代理后端HTTPS服务时,已在配置中指定禁用TLSv1/TLSv1.1,但抓包显示代理仍发起TLSv1握手,导致后端服务拒绝连接,出现502错误。环境为CentOS7、httpd 2.4.6、mod_ssl 2.4.6、OpenSSL 1.0.2k。
配置与错误信息
当前配置
ssl.conf:
SSLEngine on SSLProxyEngine On SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLProxyProtocol all -SSLv3 -TLSv1 -TLSv1.1
someproxy.conf:
ProxyPass /x https://x:8443 ProxyPassReverse /x https://x:8443 AllowCONNECT 8443
错误日志
[Thu Jan 05 12:31:40.599913 2023] [proxy_http:error] [pid 14] (103)Software caused connection abort: [client 172.18.0.1:59228] AH01102: error reading status line from remote server x:8443 [Thu Jan 05 12:31:40.599951 2023] [proxy:error] [pid 14] [client 172.18.0.1:59228] AH00898: Error reading from remote server returned by /x/y 172.18.0.1 - - [05/Jan/2023:12:31:40 +0000] "GET /x/y HTTP/1.1" 502 461 "-" "curl/7.68.0" 837 4435
抓包结果
1470438 8882.445761230 172.18.0.13 172.18.0.15 TLSv1 280 Client Hello
原因分析
- 版本兼容性问题:CentOS7自带的httpd 2.4.6和mod_ssl 2.4.6属于较旧版本,存在
SSLProxyProtocol排除式语法(all -xxx)在ProxyPass场景下不生效的已知问题。 - 配置加载顺序:若
someproxy.conf加载顺序早于ssl.conf,代理规则可能无法继承到ssl.conf中的协议限制配置。 - OpenSSL配置不生效:httpd的mod_ssl不会直接读取系统全局的
openssl.cnf,修改该文件无法影响代理的TLS协议版本。
解决建议
1. 直接指定TLSv1.2协议
将ssl.conf中的协议配置改为直接指定TLSv1.2,避免使用排除式语法:
SSLProtocol TLSv1.2 SSLProxyProtocol TLSv1.2
2. 将协议配置绑定到代理规则
把SSLProxyEngine和SSLProxyProtocol直接添加到someproxy.conf中,确保配置作用于当前ProxyPass规则:
SSLProxyEngine On SSLProxyProtocol TLSv1.2 ProxyPass /x https://x:8443 ProxyPassReverse /x https://x:8443 AllowCONNECT 8443
3. 升级httpd和mod_ssl到最新补丁版本
CentOS7官方仓库提供了httpd 2.4.6的后续补丁,修复了部分mod_ssl协议配置问题。执行以下命令升级:
yum update httpd mod_ssl systemctl restart httpd
4. 验证配置生效情况
重启httpd后,执行以下命令检查配置是否正确加载:
httpd -t -D DUMP_CONFIG | grep -i sslproxyprotocol
若输出显示SSLProxyProtocol TLSv1.2,则说明配置已生效。
5. 强制指定TLSv1.2专属加密套件(可选)
添加加密套件配置,进一步限制仅使用TLSv1.2支持的套件:
SSLProxyCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 SSLProxyHonorCipherOrder on
内容的提问来源于stack exchange,提问作者Michael Karpel
相关产品推荐
相关产品推荐

