perl 500 SSL协商失败

时间:2014-09-07 07:46:17

标签: web-services perl ssl soap soaplite

500 SSL协商失败。

当我尝试连接具有认证,用户名和密码作为凭据的网络服务时,

出现问题,任何人都可以帮助我

代码:

$ENV{HTTPS_CA_FILE}        = '/pass/cert.crt';
$ENV{HTTPS_CA_DIR}         = '/pass/';
$ENV{HTTPS_PROXY_USERNAME} = 'username';
$ENV{HTTPS_PROXY_PASSWORD} = 'password';

use SOAP::Lite +trace => 'debug';

$soap = SOAP::Lite->new()->on_action( sub { join '/', @_ } )->proxy("`https`://`ip`:`port`/SendSMS");

sub SOAP::Transport::HTTP::Client::get_basic_credentials {
    return 'username' => 'password';
}
$som = $soap->call(
    SOAP::Data->name('SendSMSR')->attr( { xmlns => '`https`://`ip`:`port`' } ),    # *strong text*
    SOAP::Data->name('parm1')->value('1040'),
    SOAP::Data->name('param2')->value('22222'),
    SOAP::Data->name('param3')->value('1600')
);

1 个答案:

答案 0 :(得分:1)

SOAP :: Lite使用LWP执行HTTP(S)请求。随着版本6(2011年发布),LWP开始使用IO :: Socket :: SSL作为后端,但直到版本6.06(04/2014)才获得对HTTPS代理的支持。您使用的HTTPS_PROXY_ *设置仅适用于旧的Crypt :: SSLeay后端。

请先检查您正在使用的LWP :: Protocol :: https的版本

perl -MLWP::Protocol::https -e 'warn $LWP::Protocol::https::VERSION'

如果报告的版本小于6.06,则需要升级以获得正确的HTTPS代理支持。除非你在Debian / Ubuntu上有版本6.04。然后它可能仍然有效,因为Debian在6.06发布之前包含了必要的修复(Ubuntu 14.04应该没问题)。

HTTPS_PROXY_ *将不再适用于较新的后端。从读取SOAP :: Lite :: Transport :: HTTP的代码看起来它没有对HTTPS代理的特殊处理,而是在设置环境变量HTTP_proxy时从LWP :: UserAgent调用env_proxy。您可以尝试设置以下环境变量来设置代理:

 HTTP_proxy=whatever; # set to trigger call of env_proxy
 https_proxy=http://user:pass@your-https-proxy/

如果仍然有问题启用调试。对于IO :: Socket :: SSL,您可以通过使用

调用代码来启用调试
 perl -MIO::Socket::SSL=debug4 your-program.pl

另请参阅SOAP::Transport::HTTP的文档,但没有关于如何使用https代理的特殊文档。