0

500 SSL 协商失败。

当我尝试连接具有证书、用户名和密码作为凭据的 Web 服务时遇到问题,谁能帮助我

代码:

$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')
);
4

1 回答 1

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 代理的特殊文档。

于 2014-09-07T08:27:16.130 回答