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似乎加载它们很好,但我仍然收到错误.
我得到的错误:
如果我在工作线程中动态创建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使用它想要的任何默认密码列表.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。