【问题标题】:delphi 7 convert HTTP gets to HTTPS getsdelphi 7将HTTP获取转换为HTTPS获取
【发布时间】:2016-11-02 18:12:54
【问题描述】:

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

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

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

我已经进行了很多 Google 搜索,但在我看来,我要么必须安装外部 OpenSSL DLL,要么升级到更高的 Delphi 版本,或者使用不像 TIdHTTP 组件那么简单的第三方控件.

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

【问题讨论】:

    标签: delphi delphi-7


    【解决方案1】:

    不幸的是,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 的默认 SSL/TLS 引擎,但您可以通过为其编写/获取TIdSSLIOHandlerSocketBase 派生的包装组件来插入另一个 SSL/TLS 引擎。一些第 3 方 SSL/TLS 引擎提供了这样的SSLIOHandler,例如Eldos SecureBlackbox,并且可能还有其他第 3 方SSLIOHandler 实现浮动。

    理论上,Indy 10 确实支持回到 5 的 Delphi 版本(尽管旧版本没有定期测试),因此您应该能够更新您的 Delphi 7 应用以使用 Indy 10。

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

    Indy 10 的 TIdSSLIOHandlerSocketOpenSSL 组件使用标准 OpenSSL DLL,而不是自定义 DLL,因此您可以使用任何 OpenSSL DLL 分发版(/SSL 文件夹中的 Fulgan 镜像中提供了最新的 DLL)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 2018-12-30
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多