Delphi: IdHTTP+SSL не работает. Нет ошибок!

Я использую TidHTTP + TIdSSLIOHandlerSocketOpenSSL + 2 DLL: ssleay32.dll и libeay32.dll с http://indy.fulgan.com/SSL.

Но я могу видеть всю работу моей программы в HTTP Analyzer! Он работает как HTTP, а не как HTTPS. Если я использую Opera, я не вижу загрузки с того же сайта ( https://esta.cbp.dhs.gov/esta).

Я не установил никаких специальных параметров для TidHTTP и TIdSSLIOHandlerSocketOpenSSL (может быть, я должен, но я не знаю, что именно).

Должен ли я использовать TIdSSLVersion(sslvSSLv23) + местоположение SSL-сертификата? Где я могу получить этот сертификат? Или только RootCertFile?

Как изменить порт idHttp на 443 (я должен это сделать?)?

Я использую:

procedure TForm1.FormCreate(Sender: TObject);
var mem:tmemorystream;
begin
try
  mem:=TMemoryStream.Create();
  try
    idhttp1.Get('https://esta.cbp.dhs.gov/esta/',Mem);
  except
   on E : Exception do ShowMessage(E.Message);
  end;
finally
  mem.Free;
  idhttp1.Free;
end;
end;

Пожалуйста, смотрите мое видео: http://liga-installer.realservers.info/ssl.mp4

Снимки экрана:

Спасибо спасибо спасибо за помощь!!!

2 ответа

Решение

Этот простой пример работает в Delphi XE "из коробки", поэтому вам не нужно менять порты или использовать сертификат на стороне клиента. Он основан на примере из RosettaCode:

Uses
  IdHttp, IdSSLOpenSSL

...

procedure TForm2.Button1Click(Sender: TObject);
var
  s: string;
  lHTTP: TIdHTTP;
begin
  lHTTP := TIdHTTP.Create(nil);
  try
    lHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP);
    lHTTP.HandleRedirects := True;
    s := lHTTP.Get('https://esta.cbp.dhs.gov/esta/');
    RichEdit1.Text := s;
  finally
    lHTTP.Free;
  end;
end;

Возможно, проблема в версии DLL, которую нужно развернуть. Поскольку последние версии устраняют проблемы безопасности, я рекомендую обновить вашу версию Indy до последней версии и использовать самые последние библиотеки OpenSSL с сайта fulgan.

Обновление: Вы имели в виду, что вы не можете видеть сайт с помощью веб-браузера или что когда вы это делаете, вы не можете видеть трафик в своем HTTP-анализаторе? Как упоминал Роб, если сайт не виден с помощью обычного веб-браузера, проблема, скорее всего, не в вашем приложении.

Вы используете неправильный инструмент для проверки связи. Ваше наблюдение показывает только используемый протокол - который является HTTP 1.0 или 1.1, даже если используется SSL/TLS.

Попробуйте инструмент, такой как SmartSnif или Wireshark, чтобы проверить реальный сетевой трафик. Вы увидите, что весь трафик использует порт 443 с зашифрованными данными.

Ответ заголовка HTTP/1.1 (или 1.0) абсолютно корректен для трафика HTTPS, шифрование SSL / TLS не изменяет передаваемые данные, но является транспортным уровнем поверх трафика HTTP.

Относительно HTTP Analyzer (с их веб-сайта по адресу http://www.ieinspector.com/httpanalyzer/): "Основные функции: поддержка HTTPS, показывает незашифрованные данные, отправленные через соединения HTTPS / SSL, с таким же уровнем детализации, что и HTTP".

Как я уже сказал, он декодирует SSL и показывает незашифрованный трафик на основе HTTP.

С уважением, Арвид

Другие вопросы по тегам