Proxy Forward convert http para https

1

Temos acesso a uma API da web remota que requer que um certificado de cliente acesse (é uma PKI). Eu quero permitir o acesso a esta API para servidores / IPs específicos em nossa rede sem que eles precisem importar o certificado de cliente para o keystore e também permitir que eles usem http e não https. Não podemos usar uma abordagem de proxy reverso por alguns motivos pelos quais prefiro não entrar.

Existe alguma maneira de falar http do cliente para o proxy e de lá usar https (com o certificado do cliente) para o servidor? Eu vi maneiras de conseguir isso no squid usando SslBump, mas apenas quando o https está sendo usado pelo cliente. Eu tenho visto algumas perguntas como esta para o Apache, mas todas usam ProxyPass, que de acordo com o Módulo Apache mod_proxy | O apache.org é apenas para proxies reversos.

Para ilustrar:

  • O cliente está configurado para usar o proxy mylocalproxy:8999 e chama o link

  • O proxy mylocalproxy conecta-se ao link e apresenta o certificado do cliente.

Estou aberto a usar o squid, o apache ou qualquer servidor da web que ofereça recursos reais de proxy de encaminhamento.

    
por dashambles 13.04.2018 / 11:38

1 resposta

1

Um servidor Squid configurado como proxy de encaminhamento é capaz de receber solicitações HTTP simples de clientes e encaminhar solicitações HTTPS para servidores upstream de forma transparente. No entanto, é necessário um programa de reescrita de URL externo.

Escreva o seguinte programa de regravação de URL em /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";
        }
    }
}

Em seguida, adicione esses parâmetros de configuração em /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

Ajuste sslproxy_client_certificate e sslproxy_client_key de acordo com o caminho real do certificado de cliente que o Squid usará.

    
por 15.04.2018 / 01:35