OpenSSL 1.0.2.g更新破坏了我的Delphi应用程序

Jan*_*gen 2 delphi openssl certificate indy10 delphi-xe2

从OpenSSL 1.02f升级到1.02g后,我的Win32程序失败.
我确保在升级后重新启动,并且我已经验证了正确的libeay32.dll,libssl32.dll并且ssleay32.dll正在C:\Windows\SysWOW64(并且如果我将它们复制到我的app目录中也没有帮助).

var
  lIOHandleSSL      : TIdServerIOHandlerSSLOpenSSL;
  FWebBrokerBridge  : TIdHTTPWebBrokerBridge;       // = class(TIdCustomHTTPServer)
begin    
  FWebBrokerBridge := TIdHTTPWebBrokerBridge.Create(Self);    
  LIOHandleSSL := TIdServerIOHandlerSSLOpenSSL.Create(FWebBrokerBridge);    // LIOHandleSSL.SSLOptions.method is sslvTLSv1
  LIOHandleSSL.SSLOptions.CertFile     := ...
  LIOHandleSSL.SSLOptions.RootCertFile := ...
  LIOHandleSSL.SSLOptions.KeyFile      := ...
  LIOHandleSSL.OnGetPassword := HTTPSIOHandlerSSLOpenSSLGetPassword;
  FWebBrokerBridge.IOHandler := LIOHandleSSL;
  FWebBrokerBridge.Active := true;
Run Code Online (Sandbox Code Playgroud)

错误发生EIdOSSLCouldNotLoadSSLLibrary: Could not load SSL library在"活动"语句中.

可以发生什么,以及如何解决它

这是一个Delphi XE2应用程序,Indy版本是10.5.8.0

FWIW 这是OpenSSL 1.02g更新日志

[已编辑添加]
- 我们使用此OpenSSL二进制安装程序.
- 我添加了WhichFailedToLoad()函数(from IdSSLOpenSSLHeaders.pas)并返回以下字符串:SSLv2_method,SSLv2_server_method,SSLv2_client_method
- 我已从此问题中删除了我的证书文件的描述.Ken White正确地指出代码不在加载证书的阶段

Dav*_*nan 5

这包括在这里:http://www.indyproject.org/sockets/blogs/changelog/20150907.en.aspx

总之,SSLv2不安全,因此OpenSSL的某些分销商禁用SSL2.您似乎正在使用这样的OpenSSL.较旧版本的Indy认为以下功能至关重要:

  • SSLv2_method
  • SSLv2_server_method
  • SSLv2_client_method

如果OpenSSL DLL未导出这些函数,则无法加载这些版本的Indy.

要解决此问题,您需要执行以下操作之一:

  • 查找不禁用SSLv2的OpenSSL DLL.这听起来不像是解决问题的聪明方法.
  • 升级到可以处理被禁用的SSLv2的Indy版本.
  • 升级到Delphi 10 Seattle Update 1,其中包括Indy版本5311,是最早处理该问题的Delphi版本.