代码之家  ›  专栏  ›  技术社区  ›  Adriaan

动态使indy使用TLSv1.2

  •  5
  • Adriaan  · 技术社区  · 6 年前

    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;
    
    1 回复  |  直到 6 年前
        1
  •  10
  •   Remy Lebeau    6 年前

    您需要启用 sslvTLSv1_2 中的标志 TIdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions 财产( only sslvTLSv1 (TLS v1.0) is enabled by default ),例如:

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

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

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