delphi – 动态制作indy使用TLSv1.2

GitHub已停止支持TLS v1.0和v1.1( https://githubengineering.com/crypto-deprecation-notice/),因此我的代码不再想从中下载.我已经检查了,似乎我需要让Indy使用TLS v1.2,如下所述: Using Indy 10 IdHTTP with TLS 1.2.

我已经将OpenSSL DLL更新到http://indy.fulgan.com/SSL/的最新版本,并且Indy似乎加载它们很好,但我仍然收到错误.

我得到的错误

screenshot

如果我在工作线程中动态创建Indy对象,如何让Indy使用TLS v1.2?

现行代码

constructor TDownload.Create(CreateSuspended: Boolean; aurl,afilename: string);
begin
  inherited Create(CreateSuspended);
  httpclient := TIdHTTP.Create(nil);
  httpclient.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/61.0.3163.100 Safari/537.36';
  httpclient.IOHandler := TIdSSLIOHandlerSocketopenSSL.Create(httpclient);
  httpclient.HandleRedirects := True;
  httpclient.OnWorkBegin := idhttp1WorkBegin;
  httpclient.OnWork := idhttp1Work;
  url := aurl;
  filename := afilename;
end;

解决方法

您需要在TIdSSLIOHandlerSocketopenSSL.SSLOptions.SSLVersions属性( only sslvTLSv1 (TLS v1.0) is enabled by default)中启用sslvTLSv1_2标志,例如:

TIdSSLIOHandlerSocketopenSSL(httpclient.IOHandler).SSLOptions.SSLVersions := [sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2];

另请注意,您可能还必须更新TIdSSLIOHandlerSocketopenSSL.SSLOptions.CipherList属性以启用TLS v1.2密码.有关实际语法,请参阅OpenSSL documentation.认情况下,如果您没有指定自己的CipherList值,Indy会使用’AES:ALL:!aNULL:!eNULL:RC4:@STRENGTH’.

编辑:Indy不再指定认密码列表.如果SSLOptions.CipherList属性为空,则现在允许OpenSSL使用它想要的任何认密码列表.

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...