我们如何与网站建立联系?获取 SSL 错误 1409442E

Mar*_*ius 4 delphi openssl indy indy10 delphi-10.2-tokyo

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

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

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};
Run Code Online (Sandbox Code Playgroud)

这给出了以下错误:

使用 SSL 连接时出错。错误:1409442E:SSL 例程:ssl3_read_bytes:tlsv1 警报协议版本

我曾尝试在与 exe 相同的目录中为 OpenSSL 安装最新的 DLL,但这并没有解决它。

有任何想法吗?

Rem*_*eau 10

确保您使用的是支持 TLS v1.2 的最新版本的 OpenSSL DLL(Indy 当前支持的最新版本是1.0.2u),然后您需要sslvTLSv1_2在 SSLIOHandler 的SSLOptions.SSLVersions属性中启用该标志:

IdSSL.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
Run Code Online (Sandbox Code Playgroud)

或者:

IdSSL.SSLOptions.SSLVersions := [sslvTLSv1_2];
Run Code Online (Sandbox Code Playgroud)

Indy 默认只启用 TLS v1.0,显然https://poloniex.com不允许 TLS v1.2 之前的 TLS 版本。