Delphi. Как послать POST запрос по HTTPS?

Итак, как послать POST запрос по HTTPS? Зачем? Чтобы скрыть данные от анализатора HTTP трафика.

Вот чем займемся сегодня. В предыдущем посте мы делали SSL сертификаты. За основу возьмем приложение, написанное в посте

Как отправить POST запрос, принять и декодировать его на idHTTPServer?

Что нужно сделать на сервере?

В модуле сервера добавим компонент IdServerIOHandlerSSLOpenSSL и в свойстве компонента idHTTPServer IOHandler пропишем укажем вновь добавленный компонент

57

Сертификаты, созданные в прошлом посте – положим в одну папку с EXE сервера.У компонента IdServerIOHandlerSSLOpenSSL пропишем наши сертификаты следующим образом

59

 

Также отметим Method и Mode как на рисунке выше.

Что нужно сделать на клиенте?

Нам нужно сформировать адрес с https, в конкретном примере, который я взял за основу это делается так, в модуле uTestHTTPClient.pas

В результате будет происходить обращение по адресу

В принципе этого оказалось достаточно, для того, чтобы трафик не отлавливался HTTP Debugger, например. Вот результат обращения

60

61

Как видно, ничего не отловлено! Что хорошо для нас.

Теперь попробуем обратиться к HTTP

62

Теперь очистим свойство idHTTPServer.IOHandler и попробуем обратиться к http

63

Параметры передаются. А что у нас в HTTPDebugger?

64

 

В принципе всё работает, вот ещё 2 нюанса!

HTTPAnalyzer видит всё, если он на машине через которую проходит трафик !

Поначалу я использовал его и никак не мог понять, почему когда я использую SSL, я всё равно вижу отправляемый контент! И вот как оказалось – эта программа внедряется в процесс. Косвенное подтверждение этому я нашел на форуме, цитирую здесь

HTTP Analyzer не умеет работать с HTTPS вообще. Если он видит данные значит канал не шифрован вообще.

Тут вы не правы, и вот почему.

1) Пробовал проснифать софт через HTTP Debugger, он ни чего не показал. Это навело меня на мысль что HTTP Analyzer внедряется в процесс.

2) Нашел один пост на стороннем форуме, где речь шла как раз о HTTP Analyzer, цитирую

Цитата:
к каждому процессу (по возможности) цепляется HookWinSockVх.dll (х-версия установленного httpanalyzer
Поэтому доступны “исходные данные”. Надеюсь не нужно пояснять каким образом?Если использовать софт, который показывает информацию (пакеты) идущую через сетевую карту – там не будет “исходных данных”, будет зашифровано.

Это еще больше заставило верить меня что все было сделано правильно и канал у меня шифрован.

3) Ну и самое убедительное. Был поставлен VirtualBox, в него закинут софт и запущен там, HTTP Analyzer снифал VirtualBox. Результат, HTTP Analyzer не показал как софт делал соединения по https.

Нужно ли подключать TIdSSLIOHandlerSocketOpenSSL на клиенте?

Для данной задачи как оказалось этого не требуется. А вот если необходимо загружать страницы методом Get, то тогда наверное нужно. Но всё это надо тестить, я тоже пока не до конца разобрался во всех нюансах.

К тому же, у idHTTP тоже есть поля для сертификатов, пока не совсем понятно зачем. Нужно почитать документацию.

This entry was posted in Delphi, Indy. Bookmark the permalink.