HTTPS 代理使用自己的证书回答 CONNECT

HTTPS 代理使用自己的证书回答 CONNECT

我正在配置具有以下方案的 DMZ:

Internet - Server A - Security Appliance - Server B - Intranet

在这个 DMZ 中,我需要一个代理服务器,用于从 Intranet 到 Internet 的 http(s) 连接。问题是,所有流量都应由安全设备扫描。为此,我必须终止服务器 B 上的 SSL 连接,将其作为纯 http 通过安全设备代理到服务器 A,然后进一步作为 https 进入 Internet。然后,客户端和服务器 B 以及目标服务器和服务器 A 之间将持续加密。服务器 A 和服务器 B 之间的通信未加密。我知道安全风险,并且客户端将看到有关服务器 B 证书的未知 CA 的一些警告。

作为软件,我想在服务器 A 和服务器 B 上使用 Apache Web 服务器。

第一步,我尝试配置服务器 B,使其作为 SSL 加密的端点。因此,它必须与客户端建立加密(响应 HTTP CONNECT)。

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 请求,并在客户端和目标之间建立加密连接。遗憾的是,无法配置 mod_proxy_connect 来解密 SSL 连接。是否有可能使用 Apache 实现这种代理?

答案1

您尝试实施的是官方 SSL MITM 代理(“官方”而不是“攻击者”)。我认为 Apache Httpd 没有能力做到这一点(并动态重新生成具有正确身份的证书)。

有产品可以实现这一点。快速搜索可找到以下链接:

答案2

我得出结论,使用 mod_rewrite 和充当反向代理的虚拟主机,这是可行的。连接进入正向代理并将 URL 重写为虚拟主机(在服务器 B 上)+将原始 URL 写入 HTTP 标头。虚拟主机充当 SSL 端点和反向代理,并将未加密的请求转发到服务器 A(通过安全设备)。服务器 A 将目标 URL 重写为原始 URL 并转发给它。我将在接下来的几天尝试一下,并告诉您它是否有效。如果不行,我将讨论为此使用 squid 和 sslbump。

感谢您迄今为止的回答!

相关内容