8

我使用 TidHTTP + TIdSSLIOHandlerSocketOpenSSL + 2 个 DLL:来自http://indy.fulgan.com/SSL的 ssleay32.dll 和 libeay32.dll 。

但是我可以在 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

屏幕截图:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

感谢感谢感谢帮助!!!

4

2 回答 2

15

这个简单的示例在 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 版本升级到最新版本并使用 fulgan 站点中最新的 OpenSSL 库。

更新:您的意思是说您无法使用 Web 浏览器查看该站点,或者当您这样做时,您无法在 HTTP 分析器中查看流量?正如 Rob 所提到的,如果使用常规 Web 浏览器看不到该站点,那么问题可能不在于您的应用程序。

于 2011-07-14T13:08:56.993 回答
2

您使用了错误的工具来检查通信。您的观察仅显示使用的协议 - 即使使用 SSL/TLS,它也是 HTTP 1.0 或 1.1。

尝试使用 SmartSnif 或 Wireshark 之类的工具来检查真实的网络流量。您将看到整个流量使用端口 443 和加密数据。

HTTP/1.1(或 1.0)的头部响应对于 HTTPS 流量是绝对正确的,SSL/TLS 加密不会改变传输的数据,而是HTTP 流量之上的传输层。

关于 HTTP 分析器(来自他们的网站http://www.ieinspector.com/httpanalyzer/):“主要特点:支持 HTTPS,向您显示通过 HTTPS/SSL连接发送的未加密数据,其详细程度与 HTTP 相同。”

因此,正如我所说,它会解码 SSL 并向您显示基于 HTTP 的未加密流量。

问候, 阿维德

于 2011-07-14T15:38:50.730 回答