2

我正在使用 LWP::UserAgent 将 XML 数据 POST 到远程服务器。远程 URL 是 https,他们向我发送了一个 .crt 文件以安装在我的服务器上。

当我尝试连接到他们的服务器时,我收到以下消息:

发生错误

500 无法连接到 previewtest.clverify.com:443(证书验证失败) 500 无法连接到 previewtest.clverify.com:443(证书验证失败) 内容类型:文本/纯文本客户端日期:星期三,25 2012 年 1 月 05:11:24 GMT 客户端警告:内部响应无法连接到 previewtest.clverify.com:443(证书验证失败) LWP::Protocol::https::Socket: SSL 连接尝试失败,出现未知错误错误: 14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证在 /usr/lib/perl5/site_perl/5.8.8/LWP/Protocol/http.pm 第 51 行失败。

如何正确引用我服务器上的 SSL 证书并将其发送给他们?

这是代码:

sub ConsumerInfo {
my $cid = shift;

my $response = undef;
my $sendXML = &Create_ConsumerInfo_Request($cid);
if ($sendXML) {
    &DoXMLUpload($sendXML);

    my $browser = LWP::UserAgent->new(agent => 'perl post');
    $browser->credentials('sumURL:443','sumRealm','sumUserID'=>'sumPassword');
    $response = $browser->request(POST 'sumFullURL',
        Content_Type => 'text/xml',
        Content => $sendXML);
    print "Content-type:text/html\n\n";
    print $response->error_as_HTML unless $response->is_success;
    print $response->as_string;
} else {
    &ErrorMsg("No XML Code Was Found.");
    exit;   
}
# ===============================================================
# Need to insert parser in here to convert this into an array.
# ===============================================================
return $response;
}

现在...假设发送给我的证书位于/usr/bin/some_dir/DigiCertCA.crt。

如何设置它以在调用服务器时检查我的证书?

4

1 回答 1

1

首先,我会尝试将my $browser行更改为:

my $browser = LWP::UserAgent->new(
  agent => 'perl post',
  ssl_opts => {
    verify_hostname => 1,
    SSL_ca_path => '/usr/bin/some_dir',
  },
);
于 2012-01-25T06:24:31.920 回答