2016-01-14 4 views
1

я могу использовать socat для перенаправления портов, как это:Сокат перенаправление портов для протокола HTTPS

socat TCP4-LISTEN:8080 TCP4:123.456.789.12:80 

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

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

UPDATE: Мне нужен один процесс socat между Firefox и удаленным сервером. socat - это просто форвардер (перенаправитель прокси), не более того. Что-то вроде этого:

Firefox -> socat -> server 
     ------------> 
      https 
+0

Вы попробовали [этот рецепт] (http://www.dest-unreach.org/socat/doc/socat-openssltunnel.html)? – Thor

+0

У меня нет двух 'socat', но один' socat' и Firefox. Поэтому я не понимаю, что рецепт ... –

+0

Мне просто нужно перенаправить 'https'-запросы из Firefox (через' socat') на удаленный сервер. Соединение 'ssl' должно быть между Firefox и сервером,' socat' - просто перенаправитель, не более того. Когда я пытаюсь выполнить эту команду 'socat TCP-LISTEN: 8081, fork, reuseaddr OPENSSL: 123.456.789.123: 80, verify = 0', я получил ошибку" error: 140770FC: Подпрограммы SSL: SSL23_GET_SERVER_HELLO: неизвестный протокол ". –

ответ

3

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

Попытка просмотреть SOCAT к google.com с HTTPS работает, хотя и с предупреждением сертификата SSL:

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

(использовать fork и reuseaddr разрешить несколько соединений и быстрый IP: повторное использование портов, но beaware of the caveats) ,

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

+0

Спасибо за ваш ответ, но это не соответствует моей задаче. I * do * требуется безопасное соединение (в идеале без каких-либо предупреждений SSL-сертификата)! Firefox должен установить такое безопасное соединение с удаленным сервером через 'socat', как будто нет' socat'. 'socat' - просто форвардер (перенаправитель), не более того. –

+2

@DenisShevchenko: Насколько я знаю, вы не сможете избежать предупреждения о сертификате, потому что вы указываете свой браузер на сервер, на котором запущен 'socat', который не соответствует сертификату. Это функция дизайна протокола SSL, чтобы избежать атак типа «человек в середине». – Thor

0

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

3

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

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

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

  1. редактировать ваш hosts file и добавьте домен example.com к LOCALHOST линии (вроде HOWTO является here)

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

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

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

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


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

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

  • нет номера порта написан в сертификате сервера (который, как правило, не так)


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

Удачи вам!