Stunnel: ssl para ssl

2

Eu tenho um pequeno serviço que escuta apenas no link e verifica o nome do host de origem (deve ser localhost). Eu quero ligar 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

log do openssl_client:

link

Por favor note que este certificado é diferente, do que no localhost: 41952.

teste de curvas:

$ 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 de client = yes ? Mas eu não tenho nenhum certificado, a menos que eu tenha exportado do Firefox no site do serviço link

Minha pergunta original:

Proxy reverso gratuito com SSL para Windows

    
por user66638 09.10.2015 / 13:26

2 respostas

3

stunnel é um programa para criar um gateway entre SSL e não SSL. A partir da descrição na página inicial :

Stunnel is a proxy designed to add TLS encryption functionality to existing clients and servers without any changes in the programs' code

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

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 do TCP. O servidor verá a conexão vinda 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 como reivindicado em uma resposta, mas que o cabeçalho de solicitação HTTP Host tem o esperado valor 'localhost'. Como o cabeçalho do host é definido a partir do URL, você precisa garantir que o pedido seja encaminhado ao sistema remoto e que o navegador não esteja tentando resolver o URL sozinho. Caso contrário, ele tentará 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.

    
por 09.10.2015 / 13:52
0

Para se conectar ao link e acessar o serviço SSL que escuta na porta 4952 da interface de loopback no host com o IP 192.168.1.10:

Precisamos de duas estrofes 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 posso conseguir é modificar o host de cabeçalho para localhost para todas as solicitações no stunnel.

De enrolar, funciona perfeitamente:

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