动态地使 indy 使用 TLSv1.2
Dynamically making indy use TLSv1.2
GitHub 已停止支持 TLS v1.0 和 v1.1 (https://githubengineering.com/crypto-deprecation-notice/), so my code no longer wants to download from it. I have checked and it seems I need to make Indy use TLS v1.2, as stated here: .
我已经将 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 现在可以使用它想要的任何默认密码列表。
GitHub 已停止支持 TLS v1.0 和 v1.1 (https://githubengineering.com/crypto-deprecation-notice/), so my code no longer wants to download from it. I have checked and it seems I need to make Indy use TLS v1.2, as stated here: .
我已经将 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 现在可以使用它想要的任何默认密码列表。