Apache作为代理:如何在下游端配置TLS?

ee7vknir  于 2022-11-16  发布在  Apache
关注(0)|答案(2)|浏览(174)

我们希望使用Apache 2(v2.4.51)作为(反向)代理来访问下游服务器(运行Tomcat)。Tomcat被配置为仅接受TLS v1.2和一组非常有限的密码(这是不可协商的)。
在日志中,我发现我们的Apache尝试使用TLS v1.3打开到Tomcat的连接,这导致下游服务器立即终止连接,并且没有进一步的通信发生。
我如何配置Apache服务器在 * 传出 */ * 下行 * 连接上使用特定的TLS版本和密码?到目前为止,我找到的Apache TLS配置都是处理 * 前端 * 端,即Apache接收和接受的内容。但在我的情况下,我需要调整后端端,即Apache在转发请求时使用的内容。
如何/在何处进行配置?
编辑:同时,我意识到术语“上游”和“下游”并不总是一致使用-所以以防万一:这里的“下游”是指如下所述的连接(2):
{浏览器/互联网} --(1)--〉[Apache反向代理服务器] --(2)--〉[Tomcat应用程序服务器]。
编辑2:在Tomcat的日志( Catalina .out)中,我不断收到下面的异常,这似乎表明它是使用TLS v1.3解决的(它不能处理):

Oct 06, 2022 5:22:06 PM org.apache.tomcat.util.net.NioEndpoint setSocketOptions
SEVERE: 
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
    at sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:171)
    at sun.security.ssl.ServerHandshakeContext.<init>(ServerHandshakeContext.java:62)
    at sun.security.ssl.TransportContext.kickstart(TransportContext.java:220)
    at sun.security.ssl.SSLEngineImpl.beginHandshake(SSLEngineImpl.java:97)
    at org.apache.tomcat.util.net.SecureNioChannel.reset(SecureNioChannel.java:89)
    at org.apache.tomcat.util.net.SecureNioChannel.<init>(SecureNioChannel.java:71)
    at org.apache.tomcat.util.net.NioEndpoint.setSocketOptions(NioEndpoint.java:666)
    at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:808)
    at java.lang.Thread.run(Thread.java:750)

javax.net.ssl|FINE|B5|http-nio-8443-Acceptor-0|2022-10-06 17:22:07.539 CEST|HandshakeContext.java:304|No available cipher suite for TLS13
javax.net.ssl|SEVERE|B5|http-nio-8443-Acceptor-0|2022-10-06 17:22:07.540 CEST|TransportContext.java:316|Fatal (HANDSHAKE_FAILURE): Couldn't kickstart handshaking (
"throwable" : {
  javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
    at sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:171)
    at sun.security.ssl.ServerHandshakeContext.<init>(ServerHandshakeContext.java:62)
    at sun.security.ssl.TransportContext.kickstart(TransportContext.java:220)
    at sun.security.ssl.SSLEngineImpl.beginHandshake(SSLEngineImpl.java:97)
    at org.apache.tomcat.util.net.SecureNioChannel.reset(SecureNioChannel.java:89)
    at org.apache.tomcat.util.net.SecureNioChannel.<init>(SecureNioChannel.java:71)
    at org.apache.tomcat.util.net.NioEndpoint.setSocketOptions(NioEndpoint.java:666)
    at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:808)
    at java.lang.Thread.run(Thread.java:750)}

编辑3:我的/etc/apache2/conf.d/proxy.conf文件现在读作:

Listen 443

<VirtualHost *:443>
    SSLEngine On
    SSLCertificateFile -name-removed-
    SSLProxyEngine On
    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
    SSLProxyMachineCertificateFile -name-removed-
    ProxyPass /foobar https://-name-removed-:8443/foobar
    ProxyPassReverse /foobar https://-name-removed-:8443/foobar

    SSLProxyProtocol +TLSv1.2
    
    <Proxy "*">
        Require all granted
        SSLProxyProtocol +TLSv1.2
    </Proxy>
    LogLevel debug
    ErrorLog "-name-removed-"
</VirtualHost>

注意:“foobar”和“-name-removed-”代表我为了隐私而替换的值。
编辑4:nmap的响应是:

# nmap -sV --script ssl-enum-ciphers -p 8443 127.0.0.1
Starting Nmap 7.70 ( https://nmap.org ) at 2022-10-10 16:12 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00011s latency).

PORT     STATE SERVICE    VERSION
8443/tcp open  tcpwrapped

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 3.67 seconds
#

这说明了什么?

t98cgbkg

t98cgbkg1#

我建议运行一个像nmap这样的实用程序来评估后端服务器(Tomcat)的SSL功能。nmap很好地打印出给定TLS服务器支持的TLS协议和密码。使用这些信息,我们可以使用SSLProxyProtocol和SSLProxyCipherSuite指令配置Apache HTTPD,使其在后端连接中使用相同的协议和密码。
如何使用nmap:nmap -sV --脚本ssl枚举密码-p

gojuced7

gojuced72#

问题已经解决了!我在配置文件中有一个错字!为我感到羞耻,为消耗的带宽感到抱歉。

相关问题