【问题标题】:Delphi: IdHTTP+SSL does not work. No errors!Delphi:IdHTTP+SSL 不起作用。没有错误!
【发布时间】:2011-07-14 08:03:56
【问题描述】:

我使用 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

屏幕截图:

感谢感谢感谢您的帮助!!!

【问题讨论】:

  • -1。如果您无法通过 Internet Explorer 或 Opera 看到下载,那么问题显然不在于您的应用程序。你找错树了。去找出服务器出了什么问题。
  • esta.cbp.dhs.gov/esta 在这里工作 - 那么If I use IE, Opera I can not see downloading with the same site 对您来说是什么意思?你检查过你的代理/防火墙设置吗?
  • 我错过了问题的那一部分。我可以毫无问题地访问该网站。
  • Rob Kennedy,请尝试使用 Opera 使用 HTTPS 访问 10 个网站(Http 分析器可以看到 IE)->HTTP 分析器中不会有流量。然后在你的程序中尝试这些网站 -> 会有流量。

标签: delphi ssl idhttp


【解决方案1】:

这个简单的示例在 Delphi XE 中开箱即用,因此您无需更改端口或在客户端使用证书。它基于an example from 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 浏览器看不到该站点,那么问题可能不在于您的应用程序。

【讨论】:

  • @maxfax:使用 Opera 或 IE,页面加载时没有流量? ;-)
  • 完全正确:它不显示 Opera,IE - 是的。我试试travelregistration.state.gov/ibrs/ui
  • @Bruce McGee。当我使用 Opera 连接到该站点时,HTTP Analyzer 中没有流量,但该站点已加载到 Web 浏览器中。当我做同样的事情时(idHTTP1.Get)-> 我看到了流量-> 请看屏幕截图-> 使用的是 HTTP,而不是 HTTPS(请求行:“GET /esta/ HTTP/1.1”!!!!)。我已经尝试过您的示例-> 相同的结果,但不起作用。您是否尝试过该代码示例,例如HTTP 分析器?如果使用您的示例,您能看到流量吗?附: HTTP Analyzer 可以看到 IE、FireFox。
【解决方案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 的未加密流量。

问候, 阿维德

【讨论】:

  • HTTP Analyzer 显示 HTTPS... 如果我使用 Opera、IE... 为什么它不显示任何内容?安全性怎么样...每个人都可以看到我的程序传输的内容。是 SSL 的感觉吗?我不知道 SSL 是开发出来的,每个人都可以看到一切。在他们的网站上:“如果应用程序使用 Microsoft WININET API(例如 Outlook)、Mozilla NSS API(例如 firefox、thunderbird)或 OpenSSL,则 HTTPS 可用。”如果我使用 IE,它甚至什么都不显示。
  • 事实就是事实:我使用 Opera 和我的程序从esta.cbp.dhs.gov/esta 下载。 HTTP Analyzer 没有显示 Opera,但我的程序 - 是的。网站是一样的!
  • 抱歉 maxfax 但您不了解 SSL/TLS 的概念。您的本地客户端是否可以解码通信并不重要,例如通过挂钩 WinInet、NSS 或 OpenSSL。当它在您的机器之外时,整个通信都受到保护。您可以做些什么来保护您的本地客户端是用户和应用程序空间限制的一部分。创建已知且安全的环境不是 SSL/TLS 的一部分。编辑:HTTP Analyzer 可能不会解码 Opera,因为它不受支持。您提到的每个浏览器在使用 Wireshark 之类的合适的东西查看时都会显示编码流量。
  • 好的,我同意。但是:为什么 HTTP Analyzer 不解码 Opera,但我的程序 IE - 是的?缺少!是不是说在客户端可以解码SSL是正常的?
  • 是的,完全正确。 HTTP Analyzer 为通常想要分析解码数据本身而不是任何编码垃圾的用户提供解码作为一项好处。缺乏对 Opera 的支持很烦人,但如果他们愿意的话,很容易添加。再次是的:如果您可以访问客户端本身(并且您拥有适当的用户权限),那么您可以挂钩使用的库(OpenSSL 和其他库)是绝对正常的。
猜你喜欢
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 2018-03-12
  • 2016-11-05
  • 2013-10-01
相关资源
最近更新 更多