带有 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
尝试过:
- ssl v3 poodle and move to tls with indy
- https://indy.fulgan.com/SSL/?C=M;O=A
- 其他
没有看到实际的握手数据,很难确定它失败的原因。
但是,我会提到 sslvSSLv2
适用于 SSL v2.0,没有人 使用它,因为它不再安全。与 sslvSSLv3
(SSL v3.0) 相同。因此,永远不要使用 sslvSSLv2
和 sslvSSLv3
(除非出于遗留目的而不得不使用)。
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。
我不具备 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
尝试过:
- ssl v3 poodle and move to tls with indy
- https://indy.fulgan.com/SSL/?C=M;O=A
- 其他
没有看到实际的握手数据,很难确定它失败的原因。
但是,我会提到 sslvSSLv2
适用于 SSL v2.0,没有人 使用它,因为它不再安全。与 sslvSSLv3
(SSL v3.0) 相同。因此,永远不要使用 sslvSSLv2
和 sslvSSLv3
(除非出于遗留目的而不得不使用)。
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。