关于delphi:使用Indy和TLS的Deplhi,https://testesmoleculares.com.br/(Cloudflare)的问题

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

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

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

错误:

1
2
3
4
5
6
7
8
9
---------------------------
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  
---------------------------

实际配置:

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

尝试:

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

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

谢谢!

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

尝试:

  • https://stackoverflow.com/a/49061252
  • ssl v3贵宾犬并与indy一起移至tls
  • 将Indy 10 IdHTTP与TLS 1.2结合使用
  • https://indy.fulgan.com/SSL/?C=M;O=A
  • 其他

在没有看到实际握手数据的情况下,很难确定为什么失败。

但是,我会提到sslvSSLv2是用于SSL v2.0的,因为它不再安全,因此不再有人使用。与sslvSSLv3(SSL v3.0)相同。因此,请勿使用sslvSSLv2sslvSSLv3(除非出于传统目的,您必须这样做)。

sslvTLSv1_2适用于TLS v1.2。现在,许多服务器都在向此迁移。但是许多服务器尚未完全迁移。因此,您还应该启用TLS v1.0和v1.1以便更广泛地接受,例如(根本不使用SSLOptions.Method,仅使用SSLOptions.SSLVersions):

1
2
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-Cloudflare上的https://testesmoleculares.com.br/问题),您使用的是过时的版本的Indy(10.6.0.4975),无法完全处理TLS 1.2。您需要升级到最新版本(10.6.2)才能正确使用TLS 1.2。