Назад | Перейти на главную страницу

Прямой прокси конвертирует http в https

У нас есть доступ к удаленному веб-API, для доступа к которому требуется сертификат клиента (это PKI). Я хочу разрешить доступ к этому API для определенных серверов / IP-адресов в нашей сети без необходимости импортировать сертификат клиента в хранилище ключей, а также разрешить им использовать http, а не https. Мы не можем использовать подход обратного прокси по нескольким причинам, о которых я бы не стал вдаваться.

Есть ли способ передать http от клиента к прокси и оттуда использовать https (с клиентским сертификатом) на сервер? Я видел способы добиться этого в squid с помощью SslBump, но только тогда, когда https используется клиентом. Я видел несколько подобных вопросов для Apache, но все они используют ProxyPass, который, согласно здесь Модуль Apache mod_proxy | apache.org только для обратного проксирования.

Проиллюстрировать:

Я открыт для использования 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.