我正在configuration一个具有以下Scheme的DMZ:
Internet - Server A - Security Appliance - Server B - Intranet
在这个DMZ中,我需要一个代理服务器来连接从Intranet到Internet的http连接。 问题是,安全设备应扫描所有stream量。 为此,我必须终止服务器B上的SSL连接,通过安全设备将其作为普通http代理到服务器A,然后再作为https访问Internet。 客户端和服务器B以及目标服务器和服务器A之间的encryption是持续的。服务器A和服务器B之间的通信是未encryption的。 我知道安全风险,并且客户端会看到服务器B证书的未知CA的一些警告。
作为软件,我想在服务器A和服务器B上使用Apache Web服务器。
作为第一步,我尝试将服务器Bconfiguration为SSLencryption的端点。 所以它必须build立与客户端的encryption(回答HTTP连接)。
Listen 8443 <VirtualHost *:8443> ProxyRequests On ProxyPreserveHost On AllowCONNECT 443 # SSL ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel debug SSLProxyEngine on SSLProxyMachineCertificateFile /etc/pki/tls/certs/localhost_private_public.crt <Proxy *> Order deny,allow Deny from all Allow from 192.168.0.0/22 </Proxy> </VirtualHost>
使用这个代理服务器,只有CONNECT请求被传递,客户端和目标之间的encryption连接被build立。 不幸的是,不可能configurationmod_proxy_connect来解密SSL连接。 有没有可能用Apache来完成这种代理?
你想要实现的是一个官方的SSL MITM代理(“官方”而不是攻击者)。 我不认为Apache Httpd有能力做到这一点(并在运行中重新生成一个正确的身份证书)。
有产品实现这一点。 快速search导致这些链接:
我得出这样的结论:使用mod_rewrite和作为反向代理的虚拟主机是可能的。 连接进入转发代理并将URL重写为虚拟主机(在服务器B上)+将原始URL写入HTTP标头。 虚拟主机充当SSL端点和反向代理,并将未encryption的请求转发到服务器A(通过安全设备)。 服务器A将目标URL重写为原始URL并转发给它。 我会在接下来的日子里尝试一下,让你知道它是否成功。 如果没有,我会讨论使用sslbump这个鱿鱼。
感谢迄今为止的答案!