Delphi: IdHTTP + SSL не работает.Нет ошибок! - PullRequest
7 голосов
/ 14 июля 2011

Я использую 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

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

enter image description here enter image description here enter image description here

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

Ответы [ 2 ]

11 голосов
/ 14 июля 2011

Этот простой пример работает в 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-анализаторе?Как упоминал Роб, если сайт не виден с помощью обычного веб-браузера, проблема, скорее всего, не в вашем приложении.

2 голосов
/ 14 июля 2011

вы используете неправильный инструмент для проверки связи. Ваше наблюдение показывает только используемый протокол - это 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.

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

...