加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 将LWP与SSL和客户端证书一起使用

发布时间:2020-12-15 21:49:33 所属栏目:大数据 来源:网络整理
导读:我正在将应用程序从 PHP / cURL移植到Perl和LWP :: UserAgent.我需要向Web服务器发出POST请求并提供客户端证书和密钥文件.我试图复制的PHP代码是这样的: curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0); curl_setopt($ch,CURLOPT_SSLCERT,"/path/to/certificat
我正在将应用程序从 PHP / cURL移植到Perl和LWP :: UserAgent.我需要向Web服务器发出POST请求并提供客户端证书和密钥文件.我试图复制的PHP代码是这样的:
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0); 
curl_setopt($ch,CURLOPT_SSLCERT,"/path/to/certificate.pem"); 
curl_setopt($ch,CURLOPT_SSLKEY,"/path/to/private.key"); 
curl_setopt($ch,CURLOPT_SSLKEYPASSWD,"secretpassword");

这是我的Perl代码:

my $ua = LWP::UserAgent->new();
$ua->ssl_opts(
   SSL_verify_mode => 0,SSL_cert_file   => '/path/to/certificate.pem',SSL_key_file    => "/path/to/private.key",SSL_passwd_cb   => sub { return "secretpassword"; }  
);

PHP代码成功连接到服务器,但Perl代码失败:

SSL读取错误错误:14094410:SSL例程:SSL3_READ_BYTES:sslv3警报握手失败

我无法弄清楚我错过了什么.

解决方法

上面emazep的答案解决了我的问题.我正在使用来自UPS的示例Perl代码通过XML连接到他们的Rate服务.从我的测试中,只要你没有可以直接控制的参数调用LWP :: UserAgent,这将会有效.如果你正在使用其他模块为你调用LWP,它会很方便.只需使用Net :: SSL(除了已经使用LWP的任何软件包之外)并设置一些环境变量:
...
use Net::SSL;
$ENV{HTTPS_VERSION} = 3;
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
my $browser = LWP::UserAgent->new();
...

而已!您甚至不需要使用$ENV {PERL_LWP_SSL_CA_FILE}指定服务器根证书的路径.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读