THTTPRio TLS 1.2

Posted

技术标签:

【中文标题】THTTPRio TLS 1.2【英文标题】: 【发布时间】:2019-06-12 17:50:03 【问题描述】:

我正在尝试使用 THTTPRio 组件支持 TLS 1.2。

我之前在其他项目中使用 TIdSSLIOHandlerSocketOpenSSL 和 TIdHTTP 的 IOHandler 支持 TLS 1.2。这个是 SOAP,所以我试图坚持使用 HTTPrio 组件。

它似乎无法访问 IOHandler,除非我可以启用 INDY_CUSTOM_IOHANDLER 指令,然后通过 THttpRio.HTTPWebNode 访问它。

我想我的选择是:

    强制 THTTPRio 使用 INDY,但我不确定这会产生怎样的影响和影响。 手动创建和解析soap数据包并使用TIdHTTP。

有没有比这两个选项更好的方法?

Delphi 10.2 版本 25.0.29899.2631 印地版:10.6.2.5366

【问题讨论】:

声明 USE_INDY 并重建项目以将 Indy 用于 THTTPRio(请参阅 ***.com/q/26911550/80901) 我是否遗漏了什么或者 Delphi 10.3.2 的 Soap.SOAPHTTPTrans.pas 没有那个编译器指令? 您是否在不支持此功能的旧 (WinXP) 平台上使用 THTTPRio?因为 THTTPRio 基于 Wininet,Win7 或以上版本自动支持 tls 1.2。 【参考方案1】:

我不知道从哪里开始使用 Delphi 10.2,但在 Delphi 10.3 中,内部 HTTP 客户端已替换为新的(跨平台)THttpClient(单位System.Net.HttpClient),它在 Windows 上使用@987654323 @(基于 Winapi.WinHTTP)实例来做实际的工作。

要使用 Indy,您需要基于 Indy 实现自己的自定义 THTTPClient 并使用以下方法取消注册当前的 http/https 处理程序:

TURLSchemes.UnRegisterURLClientScheme('HTTP');
TURLSchemes.UnRegisterURLClientScheme('HTTPS');

然后使用以下方法注册您的自定义 Indy 实现:

TIndyHTTPClient = class(THTTPClient)
  // Your implementation
end;

TURLSchemes.RegisterURLClientScheme(TIndyHTTPClient, 'HTTP');
TURLSchemes.RegisterURLClientScheme(TIndyHTTPClient, 'HTTPS');

【讨论】:

以上是关于THTTPRio TLS 1.2的主要内容,如果未能解决你的问题,请参考以下文章

如何停止使用 THTTPRIO 时出现的身份验证对话框

tomcat部署https+TLS 1.2+Apple ATS支持

如何使 Windows 商店应用程序与 TLS 1.2 一起使用?

[转帖]windows 2008 Server R2 /Win7启用TLS 1.2

win2008 Server R2 中IIS启用TLS 1.2

如何在 Android 应用程序中启用 TLS 1.2 支持(在 Android 4.1 JB 上运行)