从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;
'有效'错误为EIdOSSLCouldNotLoadSSLLibrary: Could not load SSL library
。言。
可以发生什么,以及如何解决??
它是Delphi XE2应用程序,Indy版本是10.5.8.0
FWIW Here is the OpenSSL 1.02g changelog
[已编辑添加]
- 我们使用this OpenSSL binary installer
- 我添加了WhichFailedToLoad()函数(来自IdSSLOpenSSLHeaders.pas
)并返回以下字符串:SSLv2_method,SSLv2_server_method,SSLv2_client_method
- 我已从此问题中删除了我的证书文件的说明。 Ken White正确地指出代码还没有加载证书的阶段
答案 0 :(得分: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。
要解决此问题,您需要执行以下操作之一: