Indy TIdhttp.Get 未加载正确版本的 SSL
Indy TIdhttp.Get is not loading proper version of SSL
我正在尝试为 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 吗?
您使用的是过时版本的 OpenSSL。
根据评论,您说您使用的是 OpenSSL 1.0.0q。该版本已有数年历史,不支持 TLS v1.2(在 1.0.1 中添加到 OpenSSL,仍然是旧版本)。当 Indy 无法使用 TLS v1.1 或 v1.2 时,它会自动回退到 TLS v1.0。
您需要更新 OpenSSL。 Indy目前支持的最新OpenSSL版本是1.0.2.
我正在尝试为 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 吗?
您使用的是过时版本的 OpenSSL。
根据评论,您说您使用的是 OpenSSL 1.0.0q。该版本已有数年历史,不支持 TLS v1.2(在 1.0.1 中添加到 OpenSSL,仍然是旧版本)。当 Indy 无法使用 TLS v1.1 或 v1.2 时,它会自动回退到 TLS v1.0。
您需要更新 OpenSSL。 Indy目前支持的最新OpenSSL版本是1.0.2.