【发布时间】:2023-04-08 09:34:02
【问题描述】:
我正在尝试创建与FreshDesk API 的接口
这是我的调用源代码:
procedure TForm1.Button1Click(Sender: TObject);
var
IdSSLIOHandlerSocket1: TIdSSLIOHandlerSocketOpenSSL;
idhttp: TIdHttp;
begin
idhttp := TIdHttp.Create(self);
idhttp.Request.ContentType := 'application/json';
IdHTTP.Request.BasicAuthentication:= True;
IdHTTP.Request.Username := 'marks@mytestcompany.com';
IdHTTP.Request.Password := 'XYZ';
idhttp.Request.Connection:='keep-alive';
IdSSLIOHandlerSocket1 := TIdSSLIOHandlerSocketOpenSSL.create(nil);
with IdSSLIOHandlerSocket1 do begin
SSLOptions.Method := sslvTLSv1_2;
SSLOptions.SSLVersions := [sslvTLSv1_2];
SSLOptions.VerifyMode := [];
SSLOptions.VerifyDepth := 2;
end;
idhttp.IOHandler := IdSSLIOHandlerSocket1;
idhttp.Request.Accept := '*/*';
idhttp.HandleRedirects := True;
if usefiddler.checked then begin
idhttp.ProxyParams.ProxyServer := '127.0.0.1';
idhttp.ProxyParams.ProxyPort := 8888 ;
end;
showMessage(idhttp.get('https://mytestcompany.freshdesk.com/api/v2/contacts'));
end;
当我使用 Fiddler 运行时,它显示它正在使用 Version: 3.1 (TLS/1.0):
这是成功的 curl 调用(它似乎使用 Version: 3.3 (TLS/1.2):
curl -v -u marks@mytestcompnay:XYZ -H "Content-Type: application/json" -X GET "https://mytestcompany.freshdesk.com/api/v2/contacts"
这是使用 curl 时的 Fiddler 结果:
我的问题是我使用了错误的 TLS 版本吗?
【问题讨论】:
-
除了
IdSSLIOHandlerSocket1的内存泄漏之外,其余代码都很好。确保 1) 您使用的是处理 TLS1.2(尤其是处理 SNI 扩展)的最新版本的 Indy,以及 2) 您使用的是支持 TLS1.2 的 OpenSSL DLL。如果 Indy 无法加载 TLS1.2 DLL 函数,它将默默地回退到 TLS1.0。当前 Indy 版本为 10.6.2.5494,支持的最新 OpenSSL 版本为 1.0.2q -
谢谢...关于内存泄漏,谢谢...这只是开发代码。有没有办法获得 Indy 和 OpenSSL 的版本?通过一些电话?
-
要获得 Indy 版本,您可以在设计时右键单击表单设计器中的任何 Indy 组件,也可以在运行时读取它们的公共
Version属性。要获取OpenSSL版本,可以在运行时调用IdSSLOpenSSL单元中的OpenSSLVersion()函数。 -
谢谢... OpenSSL 版本是 1.0.0q 2015 年 1 月。正在下载最新版本的 OpenSSL。
-
我正在获取最新版本的 OpenSSL。但是 Curl 使用 OpenSSL 吗?如果 curl 有效,这是否意味着它不是版本问题?