アクセスするにはクライアント証明書を必要とするリモートWeb APIにアクセスできます(PKIです)。クライアント証明書をキーストアにインポートし、httpsではなくhttpを使用できるようにすることなく、ネットワーク内の特定のサーバー/ IPに対してこのAPIへのアクセスを許可します。私がやりたくない理由がいくつかあるため、リバースプロキシアプローチを使用できません。
クライアントからプロキシにhttpを話し、そこからhttps(クライアント証明書を使用)をサーバーに使用する方法はありますか? SslBumpを使用してSquidでこれを実現する方法を見てきましたが、クライアントからhttpsが使用されている場合のみです。私はApacheについてこのような質問をいくつか見ましたが、それらはすべてここでProxyPassを使用しています Apache Module mod_proxy | Apache.org はリバースプロキシ専用です。
説明する:
クライアントはプロキシを使用するように構成されていますmylocalproxy:8999
と呼び出し http://pki.globalpki123.com/rest/
プロキシmylocalproxyは https://pki.globalpki123.com/rest/ に接続し、クライアント証明書を提示します。
私はイカ、Apache、または実際のフォワードプロキシ機能を提供する任意のWebサーバーを使用できます。
フォワードプロキシとして設定された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
を調整します。