проброс портов socat для https

Я могу использовать socat для переадресации портов следующим образом:

socat TCP4-LISTEN:8080 TCP4:123.456.789.12:80

В данном случае работает отлично: все http-запросы к localhost:8080 будут перенаправлены на 123.456.789.12:80.

Но как мне использовать такую ​​переадресацию для https-запросов?

ОБНОВЛЕНИЕ: мне нужен один процесс socat между Firefox и удаленным сервером. socat — это просто форвардер (прокси редиректор), не более того. Что-то вроде этого:

Firefox -> socat -> server
       ------------>
           https

person Denis Shevchenko    schedule 14.01.2016    source источник
comment
Вы пробовали использовать этот рецепт?   -  person Thor    schedule 14.01.2016
comment
У меня не два socat, а один socat и Firefox. Так что я не понимаю этого рецепта...   -  person Denis Shevchenko    schedule 15.01.2016
comment
Мне просто нужно перенаправить https-запросы из Firefox (через socat) на удаленный сервер. ssl соединение должно быть между Firefox и сервером, socat это просто редиректор, не более того. Когда я пытаюсь выполнить эту команду socat TCP-LISTEN:8081,fork,reuseaddr OPENSSL:123.456.789.123:80,verify=0, я получаю сообщение об ошибке: 140770FC: процедуры SSL: SSL23_GET_SERVER_HELLO: неизвестный протокол.   -  person Denis Shevchenko    schedule 18.01.2016
comment
Я неправильно понял ваш вопрос в первый раз. Решит ли мой ответ вашу проблему?   -  person Thor    schedule 19.01.2016
comment
К сожалению нет. Мне нужен один процесс socat, а не два. Firefox -> socat -> server.   -  person Denis Shevchenko    schedule 19.01.2016


Ответы (4)


Обычно https-серверы работают на порту 443, так что, может быть, это ваша проблема?

Попытка перейти через socat на google.com с https работает, хотя и с предупреждением о сертификате SSL:

socat TCP-LISTEN:8080,fork,reuseaddr TCP:google.com:443

(используйте fork и reuseaddr, чтобы разрешить несколько подключений и быстрое повторное использование ip:port, но остерегайтесь предостережений).

Теперь вы можете получить доступ к https в Google из браузера, просто перейдите по адресу https://localhost:8080.

person Thor    schedule 18.01.2016
comment
Спасибо за ответ, но он не подходит для моей задачи. Мне действительно нужно безопасное соединение (в идеале без каких-либо предупреждений о сертификате SSL)! Firefox должен установить такое безопасное соединение с удаленным сервером через socat, как если бы socat не было. socat — это просто форвардер (редиректор), не более того. - person Denis Shevchenko; 19.01.2016
comment
@DenisShevchenko: Насколько я знаю, вы не сможете избежать предупреждения о сертификате, потому что вы указываете в своем браузере на сервер, на котором запущен socat, который не соответствует сертификату. Это конструктивная особенность протокола SSL, позволяющая избежать атак типа «человек посередине». - person Thor; 19.01.2016
comment
Я использую это socat TCP-LISTEN:8080,fork,reuseaddr /dev/null - person Chand; 05.02.2020

Предупреждение безопасности браузера, которое вы получаете, связано с несоответствием имени хоста в URL-адресе и в сертификате сервера (например, localhost против example.com).

Чтобы переадресация работала без этого предупреждения, вам нужно поместить пересылку на тот же TCP-порт и переопределить разрешение DNS для затронутого домена (т.е. сделать example.com разрешающим для 127.0.0.1).

Самый простой подход заключается в следующем:

  1. отредактируйте свой файл hosts и добавьте домен example.com в строку localhost (вроде как здесь)

  2. запустите переадресацию (помните, что вам нужно использовать IP-адрес сервера, а не доменное имя, поскольку доменное имя уже перенаправлено на локальный хост)

    socat TCP-LISTEN:443,fork,reuseaddr TCP:123.456.789.12:443

  3. проверьте, работает ли он в браузере через https://example.com

Не забудьте удалить запись домена из файла hosts, когда закончите экспериментировать.


Если вы не можете обеспечить тот же номер порта TCP, этот подход также может работать, но только при некоторых условиях:

  • сайт использует относительные пути в ссылках (поскольку абсолютный путь будет использовать исходный (таким образом, другой) номер порта)

  • в сертификате сервера не прописан номер порта (обычно это не так)


Примечание. Можно настроить прокси-сервер MITM socat, но для этого потребуется добавить искусственный доверенный центр сертификации.

Удачи!

person vlp    schedule 21.01.2016

Попробуйте что-то вроде этого:

socat TCP-LISTEN:8080,fork,reuseaddr ssl:google.com:443
person Khalfella    schedule 03.05.2019

К сожалению, socat нельзя использовать для такой задачи. Я должен использовать настоящий прокси-сервер HTTP вместо socat.

person Denis Shevchenko    schedule 20.01.2016