我们怎样才能连接到一个网站?获取 SSL 错误 1409442E

How can we connect with a website? Getting SSL error 1409442E

我正在使用 Delphi 10.2 Tokyo,试图从网络服务器下载一些信息。

我使用 Indy 10.6.2.5366 通过此函数传递命令 URL https://poloniex.com/public?command=returnCurrencies(如果我将其粘贴到浏览器中,该命令有效):

function ReadHTTPS(const url: string): string;
var
  IdHTTP: TIdHTTP;
  IdSSL: TIdSSLIOHandlerSocketOpenSSL;
begin
  IdHTTP := TIdHTTP.Create;
  try
    IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
    IdHTTP.IOHandler := IdSSL;
    result := IdHTTP.Get(url);
    if IdHTTP.ResponseText <> '' then
      OutputDebugString(PWideChar('ReadHTTPS: ' + IdHTTP.ResponseText));
  finally
    IdHTTP.Free;
  end;
end{ ReadHTTPS};

出现以下错误:

Error connecting with SSL. error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version

我已经尝试在与 exe 相同的目录中安装 OpenSSL 的最新 DLL,但这并没有解决问题。

有什么想法吗?

确保你使用的up-to-date version of the OpenSSL DLLs支持TLS v1.2(Indy目前支持的最新版本是1.0.2u),然后你需要在 SSLIOHandler 的 SSLOptions.SSLVersions 属性:

中启用 sslvTLSv1_2 标志
IdSSL.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];

或:

IdSSL.SSLOptions.SSLVersions := [sslvTLSv1_2];

Indy enables only TLS v1.0 by default,显然 https://poloniex.com 不允许 TLS v1.2 之前的 TLS 版本。