Adr*_*off 5 delphi openssl indy indy10 delphi-10.2-tokyo
GitHub已停止支持TLS v1.0和v1.1(https://githubengineering.com/crypto-deprecation-notice/),因此我的代码不再想从中下载.我已经检查过,似乎我需要让Indy使用TLS v1.2,如下所述:使用Indy 10 IdHTTP和TLS 1.2.
我已经将OpenSSL DLL更新为http://indy.fulgan.com/SSL/中的最新版本,并且Indy似乎加载它们很好,但我仍然收到错误.
我得到的错误:
如果我在工作线程中动态创建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;
Run Code Online (Sandbox Code Playgroud)
您需要sslvTLSv1_2在TIdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions属性中启用该标志(默认情况下仅sslvTLSv1启用(TLS v1.0)),例如:
TIdSSLIOHandlerSocketOpenSSL(httpclient.IOHandler).SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
Run Code Online (Sandbox Code Playgroud)
另请注意,您可能还必须更新TIdSSLIOHandlerSocketOpenSSL.SSLOptions.CipherList属性以启用TLS v1.2密码.有关实际语法,请参阅OpenSSL文档.默认情况下,'AES:ALL:!aNULL:!eNULL:+RC4:@STRENGTH'如果您没有指定自己的CipherList值,Indy会使用.
编辑:Indy不再指定默认密码列表.如果SSLOptions.CipherList属性为空,则现在允许OpenSSL使用它想要的任何默认密码列表.