之前编译一个小程序,定时向服务器(http://)通过进行Post上传文件,当客户的服务器换成(https://)时,Post出现“Could not load SSL library”提示,说明需要加载SSL库文件失败。
问题原因:1、HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
2、HTTPS:是以安全为目标的HTTP通道,是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
3、由于http切换到HTTPS,因此当,网站使用HTTPS协议时,程序调不到库文件,出现“Could not load SSL library”出错信息。
网上搜索,找到解决办法:
一、idhttp控件需要与“IdSSLIOHandlerSocketOpenSSL”控件配对使用,通过“IdSSLIOHandlerSocketOpenSSL”控件,调用SSL。
操作:加入“IdSSLIOHandlerSocketOpenSSL”控件,并关联idhttp;
二、TIdSSLIOHandlerSocket控件,调用OpenSSL Library库文件。主要调用,下面两个文件:
“libeay32.dll”、
“libssl32.dll”
记住:这两个文件,要与网站的HTTPS版本相配合,不匹配还是要出错的,用户可以通过 http://indy.fulgan.com/SSL/ 下载。
Index of /SSL
操作:下载,逐个解压测试,本人测试好几个版本都能使用。
这二个Dll应放在执行文件存放的目录中。
这是本人提供的SSL Dll文件包 openssl-0.9.8i-win32&win64.zip-互联网文档类资源-CSDN下载
三、设置“IdSSLIOHandlerSocketOpenSSL”的SSlVersions参数
1、目前有以下五个版本
2、与版本相对就的Method,也是五种, 默认是sslvTLSv1。
匹配,主要是应对服务器的支持,控件和SSL library”的支持,综合因素。这样,你可以试试。
操作:加入二 个combobox取名cmbcmbSSLVersions和cmbMethod 提供选择:
case cmbSSLVersions.ItemIndex of0: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions := [sslvSSLv2];1: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions := [sslvSSLv23];2: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions := [sslvSSLv3];3: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions := [sslvTLSv1];4: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions := [sslvTLSv1_1];5: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions := [sslvTLSv1_2];end;case cmbMethod.ItemIndex of0: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:= sslvSSLv2;1: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:= sslvSSLv23;2: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:= sslvSSLv3;3: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:= sslvTLSv1;4: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:= sslvTLSv1_1;5: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:= sslvTLSv1_2;end;
这样通过配对测试,快速找到成功匹配。经测试:
sslvSSLv23
sslvTLSv1
sslvTLSv1_1
sslvTLSv1_2
POST提交请求成功。
注意:“IdSSLIOHandlerSocketOpenSSL”控件的SSLVersions参数,是个集合类型,可以设置几种版本同时加入这个参数:
SSLOptions.SSLVersions := [ sslvSSLv23,sslvSSLv1,sslvSSLv1_,sslvSSLv1_1];
联系客服