【发布时间】:2019-02-19 22:25:18
【问题描述】:
我有一个用 XE2 开发的 Windows 桌面应用程序,它从远程服务器以 JSON 格式提取数据。我使用 Indy 10 来管理这个。
在我收到来自服务器提供商人员的电子邮件之前,该应用程序运行良好:
“...保护通信安全的唯一协议是 TLS 1.2。旧版本(TLS.1.0、TLS.1.1 或 SSLv3)将不再有效。” 他们建议使用 TLS 1.2 或更高版本。
从那以后我有以下运行时错误
第一次机会例外,$7518845D。异常类 EIdOSSLUnderlyingCryptoError 带有消息“与 SSL 连接时出错。 使用 SSL 连接时出错。错误:1408F10B:SSL 例程:SSL3_GET_RECORD:错误的版本号。
我发现调用FidHTTP.Post时会触发错误(FidHTTP是TidHTTP的一个实例)。
我已通过以下方式修改了创建类的方法:
constructor TMyClass.Create;
begin
FidHTTP := TidHTTP.Create(nil);
FidHTTP.HTTPOptions := FidHTTP.HTTPOptions - [hoForceEncodeParams];
FidHTTP.Intercept := TIdLogFile.Create(FidHTTP);
TIdLogFile(FidHTTP.Intercept).Filename := 'c:\'+s+'.log';
TIdLogFile(FidHTTP.Intercept).Active := true;
{$IFDEF VER230}
FIdSSL := TIdSSLIOHandlerSocketOpenSSL.Create;
FIdSSL.SSLOptions.Method:=sslvTLSv1; // I have added this line
{$ENDIF}
end;
但现在我有另一个错误:
第一次机会例外,$7518845D。异常类 EIdSocketError 带有消息“Socket Error #10054 Connection reset by peer.”。
我已经用谷歌搜索了这个,但我只找到了有关 FTP 的信息,这不是我的情况。
我做错了什么?是因为我有一个没有 sslvTLSv1_2 选项的旧版本的 Indy 还是?
【问题讨论】: