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')
);
答案 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代理的特殊文档。