我使用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
截屏:
谢谢谢谢,谢谢你的帮助!!!
答案 0 :(得分:11)
这个简单的示例适用于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库。
更新: 您是说您无法使用网络浏览器查看网站,或者当您这样做时无法在HTTP分析器中看到流量?正如Rob提到的,如果使用常规Web浏览器看不到该站点,那么问题可能不在于您的应用程序。
答案 1 :(得分:2)
您使用了错误的工具来检查通信。您的观察仅显示使用的协议 - 即使使用SSL / TLS也是HTTP 1.0或1.1。
尝试使用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的未加密流量。
此致 阿尔维德