Stunnel: SSL para SSL

Stunnel: SSL para SSL

Eu tenho um pequeno serviço que ouve apenashttps://localhost:41952e verifica o nome do host de origem (deve ser localhost). Quero me conectar em "listen:1988" e redirecionar solicitações com stunnel para "localhost:41952"

https://192.168.1.10:1988 -> redirect https://localhost:41952

configuração atual:

[myservice]
cert = stunnel.pem
accept = 0.0.0.0:1988
connect = localhost:41952

Registro openssl_client:

http://pastebin.com/7bg3sf7J

Observe que este certificado é diferente do localhost:41952.

teste de ondulação:

$ curl https://192.168.1.17:1988/DYMO/DLS/Printing/Check -vk
*   Trying 192.168.1.17...
* Connected to 192.168.1.17 (192.168.1.17) port 1988 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
* Server certificate: localhost
> GET /DYMO/DLS/Printing/Check HTTP/1.1
> Host: 192.168.1.17:1988
> User-Agent: curl/7.43.0
> Accept: */*
> 

esperando para sempre.

Talvez eu precise client = yes? Mas não tenho nenhum certificado, a não ser que exportei do Firefox no site do serviçohttps://localhost:41952

Minha pergunta original:

Proxy reverso gratuito com SSL para Windows

Responder1

stunnel é um programa para criar um gateway entre não-SSL e SSL. Dedescrição na página inicial:

Stunnel é um proxy projetado para adicionar funcionalidade de criptografia TLS a clientes e servidores existentes sem quaisquer alterações no código dos programas

Esta ferramenta não foi projetada para criar um gateway de SSL para SSL. O que você precisa no seu caso é apenas um simples encaminhador TCP que pode ser feito comsocat:

socat TCP4-LISTEN:1988,fork TCP4:127.0.0.1:41952

Com este encaminhador, a conexão para 192.168.1.17:1988 é encaminhada para 127.0.0.1:41952. O cliente obterá o certificado original do servidor porque o encaminhamento é feito no nível TCP. O servidor verá a conexão vindo de 127.0.0.1.

EDIT: depois de muita comunicação, agora está claro que o objetivo não é ter o nome de host de origem correto reivindicado e na pergunta e não o Referer correto conforme reivindicado em uma resposta, mas que o cabeçalho da solicitação HTTP do Host tenha o valor esperado 'localhost '. Como o cabeçalho do host é definido a partir da URL, você precisará garantir que a solicitação seja encaminhada para o sistema remoto e que o navegador não esteja tentando resolver a URL sozinho, caso contrário, ele tentaria se conectar ao servidor na máquina onde o navegador está em execução. Para adiar a resolução da URL para o sistema de destino, você precisa executar um proxy lá, ou seja, algo como o Charles Proxy que você tentou ou algum proxy SOCKS.

Responder2

Então, para se conectarhttps://192.168.1.10:1988e acesse o serviço SSL que escuta na porta 4952 da interface de loopback no host com IP 192.168.1.10:

Precisamos de 2 estrofes de stunnel para conseguir o que queremos.

[myservice]
cert = stunnel.pem
client = no
accept = 0.0.0.0:1988
connect = localhost:1987

[myserviceaux]
cert = stunnel.pem
client = yes
accept = localhost:1987
connect = localhost:4952

A única coisa que não consigo conseguir é modificar o host do cabeçalho para localhost para todas as solicitações no stunnel.

Do curl está funcionando perfeitamente:

$ curl https://192.168.1.10:41951/DYMO/DLS/Printing/Check -k -H "Host: localhost"

Responder3

Eu resolvi um HTTPS-TO-HTTPSproblema semelhante emjanelascom este comando:

netsh interface portproxy add v4tov4 listenport=443 listenaddress=127.0.0.1 connectport=[remote-https-port] connectaddress=[remote-ip]

informação relacionada