正向代理将 http 转换为 https

正向代理将 http 转换为 https

我们可以访问需要客户端证书才能访问的远程 Web API(它是 PKI)。我想允许网络中的特定服务器/IP 访问此 API,而无需它们将客户端证书导入密钥库,并允许它们使用 http 而不是 https。我们不能使用反向代理方法,原因有几个,我不想深入讨论。

有没有办法从客户端到代理使用 http 通信,然后从那里使用 https(使用客户端证书)连接到服务器?我见过使用 SslBump 在 squid 中实现此目的的方法,但仅限于从客户端使用 https 时。我见过一些类似 Apache 的问题,但它们都使用 ProxyPass,根据这里Apache 模块 mod_proxy | apache.org仅适用于反向代理。

为了显示:

我愿意使用 squid、apache 或任何提供真正正向代理功能的 Web 服务器。

答案1

配置为正向代理的 Squid 服务器能够接收来自客户端的纯 HTTP 请求,并透明地将 HTTPS 请求转发到上游服务器。但是,需要外部 URL 重写程序。

将以下 URL 重写程序写入/etc/squid/urlrewrite.pl

#!/usr/bin/perl
select(STDOUT);
$| = 1;
while (<>) {
    if (/^(|\d+\s+)((\w+):\/+)([^\/:]+)(|:(\d+))(|\/\S*)(|\s.*)$/) {
        my $channel = $1;
        my $protocolClean = $3;
        my $domain = $4;
        my $port = $5;
        my $portClean = $6;
        my $urlPath = $7;
        if ($protocolClean eq 'http' && ($port eq '' || $portClean eq '80')) {
            print STDOUT "${channel}OK rewrite-url=\"https://${domain}${urlPath}\"\n";
        } else {
            print STDOUT "${channel}ERR\n";
        }
    }
}

然后,将这些配置参数添加到/etc/squid/squid.conf

acl pkiRestDomain dstdomain -n pki.globalpki123.com
acl pkiRestUrlPath urlpath_regex ^/rest(|\/.*)$
url_rewrite_program /etc/squid/urlrewrite.pl
url_rewrite_access allow pkiRestDomain pkiRestUrlPath
sslproxy_client_certificate /etc/pki/squid/certs/mylocalproxy.crt
sslproxy_client_key /etc/pki/squid/private/mylocalproxy.key

根据 Squid 将使用的客户端证书的实际路径sslproxy_client_certificate进行调整。sslproxy_client_key

相关内容