带有 Indy 和 TLS 的 Delphi,https://testesmoleculares.com.br/ (Cloudflare) 的问题

Deplhi with Indy and TLS, problems with https://testesmoleculares.com.br/ (Cloudflare)

我不具备 Delphi 和使用 Indy 的 TLS 方面的专业知识。 也许这不是问题,只是配置,我需要示例。 我也在 Whosebug 上尝试了一些问题,但都没有成功。

页数:https://testesmoleculares.com.br/

错误:

---------------------------
Debugger Exception Notification
---------------------------
Project IntegradorApoiado.exe raised exception
 class EIdOSSLUnderlyingCryptoError with message 'Error connecting with SSL.
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure'.
---------------------------
Break   Continue   Help   
---------------------------

实际配置:

LHandler.SSLOptions.Method := sslvSSLv2;
LHandler.SSLOptions.Mode := sslmClient;
LHandler.SSLOptions.SSLVersions := [sslvSSLv2];

尝试过:

IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1_2;
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions := [sslvTLSv1_2];

有人可以帮忙吗? 也许提供一个 POST 的例子?我正在使用 Delphi XE4

谢谢!

Github 问题: https://github.com/IndySockets/Indy/issues/317

尝试过:

没有看到实际的握手数据,很难确定它失败的原因。

但是,我会提到 sslvSSLv2 适用于 SSL v2.0,没有人 使用它,因为它不再安全。与 sslvSSLv3 (SSL v3.0) 相同。因此,永远不要使用 sslvSSLv2sslvSSLv3(除非出于遗留目的而不得不使用)。

sslvTLSv1_2 适用于 TLS v1.2。许多服务器现在正在迁移到这个。但是很多服务器还没有完全迁移。因此,您还应该启用 TLS v1.0 和 v1.1 以获得更广泛的接受,例如(根本不要使用 SSLOptions.Method,只需使用 SSLOptions.SSLVersions):

LHandler.SSLOptions.Mode := sslmClient;
LHandler.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];

通过指定多个 TLS 版本,这将允许 OpenSSL 协商一个双方都支持的可用版本。

另外,请确保您使用的是最新版本的 Indy(如果您还没有),以便您拥有所有针对 TLS 支持的修复,例如 SNI 的使用(现在有许多服务器需要 TLS 客户端才能使用)。

我可以使用 TLS 1.2 在 Web 浏览器中连接到 https://testesmoleculares.com.br/,因此在 Indy 中也应该可以使用 TLS 1.2 连接到它。


更新: 根据您在 Indy 的问题跟踪器 (#317: TLS - Problems with https://testesmoleculares.com.br/ on Cloudflare) 中针对同一问题发布的其他评论,您使用的是 过时的 版本的 Indy (10.6.0.4975),不能完全处理 TLS 1.2。您需要升级到最新版本 (10.6.2) 才能正常使用 TLS 1.2。