delphi XE https接口 出错 Could not load SSL library

    之前编译一个小程序,定时向服务器(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/ 下载。

    操作:下载,逐个解压测试,本人测试好几个版本都能使用。

    这二个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 of
    0: 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 of
    0: 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];

  • 19
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值