У нас есть доступ к удаленному веб-API, для доступа к которому требуется сертификат клиента (это PKI). Я хочу разрешить доступ к этому API для определенных серверов / IP-адресов в нашей сети без необходимости импортировать сертификат клиента в хранилище ключей, а также разрешить им использовать http, а не https. Мы не можем использовать подход обратного прокси по нескольким причинам, о которых я бы не стал вдаваться.
Есть ли способ передать http от клиента к прокси и оттуда использовать https (с клиентским сертификатом) на сервер? Я видел способы добиться этого в squid с помощью SslBump, но только тогда, когда https используется клиентом. Я видел несколько подобных вопросов для Apache, но все они используют ProxyPass, который, согласно здесь Модуль Apache mod_proxy | apache.org только для обратного проксирования.
Проиллюстрировать:
Клиент настроен на использование прокси mylocalproxy:8999
и звонки http://pki.globalpki123.com/rest/
Прокси mylocalproxy подключается к https://pki.globalpki123.com/rest/ и представляет сертификат клиента.
Я открыт для использования squid, apache или любого веб-сервера, который предоставляет реальные возможности прямого прокси.
Сервер 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
Отрегулировать sslproxy_client_certificate
и sslproxy_client_key
в соответствии с фактическим путем к сертификату клиента, который будет использовать Squid.