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 版本。