Stunnel: ssl на ssl

Stunnel: ssl на ssl

У меня есть небольшая служба, которая слушает толькоhttps://localhost:41952и проверяет имя хоста источника (это должен быть localhost). Я хочу подключиться к "listen:1988" и перенаправить запросы с помощью stunnel на "localhost:41952"

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

Текущая конфигурация:

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

Журнал openssl_client:

http://pastebin.com/7bg3sf7J

Обратите внимание, что этот сертификат отличается от сертификата на localhost:41952.

Тест на завивку:

$ 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: */*
> 

ждать вечность.

Может мне нужно client = yes? Но у меня нет никакого сертификата, если только я не экспортировал его из Firefox на сайте сервисаhttps://localhost:41952

Мой изначальный вопрос:

Бесплатный обратный прокси с SSL для Windows

решение1

stunnel — это программа для создания шлюза между не-SSL и SSL. Изописание на главной странице:

Stunnel — это прокси-сервер, предназначенный для добавления функциональности шифрования TLS к существующим клиентам и серверам без каких-либо изменений в коде программ.

Этот инструмент не предназначен для создания шлюза от SSL к SSL. В вашем случае вам нужен всего лишь простой TCP-пересылатель, который можно сделать с помощьюсокат:

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

С этим пересылателем соединение с 192.168.1.17:1988 пересылается на 127.0.0.1:41952. Клиент получит оригинальный сертификат с сервера, поскольку пересылка выполняется на уровне TCP. Сервер увидит соединение, идущее с 127.0.0.1.

EDIT: после долгого общения теперь ясно, что цель состоит не в том, чтобы правильное имя исходного хоста было заявлено в вопросе и не в правильном Referer, как заявлено в ответе, а в том, чтобы заголовок HTTP-запроса Host имел ожидаемое значение 'localhost'. Поскольку заголовок хоста задается из URL, вам нужно убедиться, что запрос пересылается на удаленную систему, и браузер не пытается самостоятельно разрешить URL, потому что в противном случае он попытается подключиться к серверу на машине, где запущен браузер. Чтобы отложить разрешение URL на целевую систему, вам нужно запустить там прокси, то есть что-то вроде Charles Proxy, который вы пробовали, или какой-нибудь SOCKS-прокси.

решение2

Итак, чтобы подключиться кhttps://192.168.1.10:1988и достигаем службы SSL, которая прослушивает порт 4952 интерфейса loopback на хосте с IP 192.168.1.10:

Нам нужно 2 потрясающих строфы, чтобы достичь желаемого.

[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

Единственное, чего я не могу добиться, — это изменить заголовок host на localhost для всех запросов в Stunnel.

Из curl все работает отлично:

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

решение3

Я решил похожую HTTPS-TO-HTTPSпроблему наОкнас помощью этой команды:

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

Связанный контент