delphi 7 将 HTTP 获取转换为 HTTPS 获取

delphi 7 convert HTTP gets to HTTPS gets

我有一个程序目前使用 Delphi 7 和 Indy 9(我相信)执行多个 HTTP GET 请求。我现在需要将它们转换为使用 HTTPS。

服务器端在我的控制之下。

我也不想在我的程序中安装任何外部 DLL。

我做了很多 Google 搜索,但对我来说,我要么必须安装外部 OpenSSL DLL,要么升级到更高的 Delphi 版本,要么使用第 3 方控件不像TIdHTTP组件那么简单。

有人对从哪里开始有任何建议吗?

不幸的是,Indy 9 需要 SSL/TLS 的 OpenSSL DLL,即便如此,它也需要 定制 版本的 DLL。这些 DLL 在 Indy 的 Fulgan mirror/SSL/Archive 文件夹中可用。

要在 Indy 9 的 TIdHTTP 中使用 HTTPS,只需将 Indy 的 TIdSSLIOHandlerSocket 组件分配给 TIdHTTP.IOHandler 属性,然后使用您的应用程序部署自定义 OpenSSL DLL .但请注意,DLL 非常旧(通常 Indy 9 也是如此),因此您将无法使用 TLS 1.0 之后的现代安全协议。

另一方面,Indy 10 不需要 OpenSSL 特别是。 OpenSSL 是 Indy 的 default SSL/TLS 引擎,但是你可以通过 writing/obtaining 为它插入另一个 SSL/TLS 引擎,一个 TIdSSLIOHandlerSocketBase-derived wrapper component .一些第 3 方 SSL/TLS 引擎提供了这样的 SSLIOHandler,例如 Eldos SecureBlackbox,并且可能还有其他第 3 方 SSLIOHandler 实现。

理论上,Indy 10 确实支持 Delphi 版本回到 5(虽然旧版本没有定期测试),所以你应该能够更新你的 Delphi 7 应用程序以使用 Indy 10 .

要在 Indy 10 的 TIdHTTP 中使用 HTTPS,只需将 TIdSSLIOHandlerSocketBase 派生的组件分配给 TIdHTTP.IOHandler 属性,然后部署 DLL(如果有的话) ) 与您的应用程序。

Indy 10 的 TIdSSLIOHandlerSocketOpenSSL 组件使用标准 OpenSSL DLL,而不是自定义 DLL,因此您可以使用任何 OpenSSL DLL 发行版(在 /SSL文件夹)。

如果您坚决避免 DLL,并且不想为第 3 方 SSL/TLS 引擎支付很多钱,您至少可以编写自己的自定义 SSLIOHandler包装 Microsoft 的 SChannel API,它内置于 Windows 并且不依赖于可分发的 DLL(基于 SChannel 的 SSLIOHandler 实现预计将包含在 Indy 的未来版本中)。