我正在构建一个代理链,以便通过其他身份验证从外部访问内部代理:
Internet -> [Apache Forward Proxy] -> [Internal Squid Proxy] -> Internal Website
Apache正向代理正在进行TLS,包括基于证书的身份验证(CBA),Squid代理需要使用用户名/密码进行基本身份验证。身份验证按两个组件的预期工作。
现在的挑战是让Apache充当正向代理,并将代理授权标头从用户转发到内部代理。
以下是我正在使用的当前配置(启用了mod_proxy和mod_proxy_connect):
# Enable forward proxy
ProxyRequests On
# Pass all requests on to the squid proxy
ProxyRemote * http://proxy.internal:3128
# Only allow proxy connect to port 443
AllowCONNECT 443
通过此设置,Apache不会将Proxy-Authorization标头转发到内部代理。我可以为此主题找到的所有设置(Proxy-Chain-Auth,ProxyAddHeaders,重写规则等)仅在使用ProxyPass的反向代理模式下工作。但是反向代理不适合这里,因为在这种模式下,Apache修改标头,而TLS网络服务器的CONNECT将无法工作。
Apache不会从客户端转发任何头字段,最后从Apache到内部代理的请求如下所示:
CONNECT someserver.de:443 HTTP/1.0\r\n
Proxy-agent: Apache/2.4.18 (Ubuntu)\r\n
\r\n
我知道Proxy-Authorization字段是逐跳字段,通常不允许传递给下一个代理。
在充当转发代理时,是否仍然可以让Apache将代理授权标头转发到内部代理?
Apache bugtracker中的相关主题存在错误。但是这个是指定在apache配置中硬编码的用户名/密码,这不是我需要的。我想单独转发客户端授权。 https://bz.apache.org/bugzilla/show_bug.cgi?id=37355