Delphi解决 openssl DLL 与 Indy 的SSL/TLS 连接问题

昨天,突然间,我的一个 Delphi 程序无法连接到互联网上的各种WMS服务器。我收到以下错误消息:

使用 SSL 连接时出错。错误 1409442E:SSL 例程:ssl3_read_bytes:tlsv1 警报协议版本

由于我使用的是最新版本的Indy,根据Delphi Praxis 上的此线程,这种情况不应该发生。事实证明,不知何故,一个非常旧版本的 openssl DLL libeay32.dllssleay32.dll 已被放置在我计算机上的 sarch 路径中(版本 1.0.0e)。获取托管在GitHubindy.fulgan.com上的最新版本并将它们放入我的程序Z-Gantt时间管理进度计划甘特图软件的可执行目录中解决了这个问题。

好吧,那么我是怎么发现情况是这样的(除了谷歌搜索猜测之外)?

IdSSLOpenSSL 单元中有一个函数 OpenSSLVersion,它返回 OpenSSL dll 的版本。在撰写本文时,该名称应以"OpenSSL 1.0.2u"开头。

还可以使用两个 DLL 的句柄调用 GetModuleName(分别通过函数 GetSSLLibHandle 和 GetCryptLibHandle 获得),为您提供实际加载的 DLL 的完整路径。当然,要使其工作,DLL 必须已加载,但调用 OpenSSLVersion 可以为您完成此操作。

Delphi 复制代码
OpenSslVer := IdSSLOpenSSL.OpenSSLVersion;
OpenSslLibName := GetModuleName(GetSSLLibHandle);
OpenSslCryptLibName := GetModuleName(GetCryptLibHandle);

我希望这对其他人有用,因为我花了一段时间才弄清楚如何获取这些信息。

@Remy Lebeau:非常感谢您已经投入并仍在投入这个库的所有工作。

相关推荐
开***能41 分钟前
高炉项目中DeviceNET到Ethernet的转换奥秘
网络·网络协议·自动化
努力也学不会java1 小时前
【网络原理】 网络编程套接字
java·开发语言·网络·网络协议·tcp/ip·php
✿ ༺ ོIT技术༻3 小时前
Linux:TCP保证可靠性的方案(2)
网络·网络协议·tcp/ip
SunsPlanter4 小时前
RPC 是什么?为什么有了 HTTP 还要用 RPC
网络协议·http·rpc
shanks665 小时前
【Bug】 [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
网络协议·bug·ssl
SQingL19 小时前
解决SSLError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption faile的问题
服务器·网络协议·ssl
网工养成记_1213821 小时前
路由协议基础
网络·网络协议·智能路由器
茉莉玫瑰花茶1 天前
socket套接字-UDP(中)
网络·网络协议·udp
iOS开发上架哦1 天前
charles网络抓包入门教程
网络协议·安全
喝养乐多长不高1 天前
详细PostMan的安装和基本使用方法
java·服务器·前端·网络协议·测试工具·https·postman