У меня есть небольшой сервис, который слушаю только на 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:
Обратите внимание, что этот сертификат отличается от сертификата на 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: // локальный: 41952
Мой первоначальный вопрос:
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.
РЕДАКТИРОВАТЬ: после большого количества сообщений теперь ясно, что цель состоит не в том, чтобы указать правильное имя исходного хоста es и в вопросе, а не в правильном Referer, как заявлено в ответе, а в том, что заголовок HTTP-запроса Host имеет ожидаемое значение localhost '. Поскольку заголовок хоста устанавливается из URL-адреса, вам необходимо убедиться, что запрос перенаправляется в удаленную систему, и браузер не пытается разрешить URL-адрес сам по себе, потому что в противном случае он попытается подключиться к серверу на машине, где браузер запущен. Чтобы отложить разрешение URL-адреса на целевую систему, вам нужно запустить там прокси, то есть что-то вроде Charles Proxy, который вы пробовали, или какой-нибудь прокси-сервер SOCKS.
Итак, чтобы подключиться к https://192.168.1.10:1988 и подключитесь к службе SSL, которая прослушивает порт 4952 интерфейса обратной связи на хосте с IP 192.168.1.10:
Нам нужно 2 stunnel строфы, чтобы достичь того, что мы хотим.
[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"
Я решил похожий HTTPS-TO-HTTPS
проблема на Windows с помощью этой команды:
netsh interface portproxy add v4tov4 listenport=443 listenaddress=127.0.0.1 connectport=[remote-https-port] connectaddress=[remote-ip]