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的主要内容,如果未能解决你的问题,请参考以下文章
tomcat部署https+TLS 1.2+Apple ATS支持
如何使 Windows 商店应用程序与 TLS 1.2 一起使用?
[转帖]windows 2008 Server R2 /Win7启用TLS 1.2