2

LWP::UserAgent を使用して、リモート サーバーへの XML データの POST を実行しています。リモート URL は https で、サーバーにインストールする .crt ファイルが送られてきました。

サーバーに接続しようとすると、次のメッセージが表示されます。

エラーが発生しました

500 Previewtest.clverify.com:443 に接続できません (証明書の検証に失敗しました) 500 previewtest.clverify.com:443 に接続できません (証明書の検証に失敗しました) Content-Type: text/plain Client-Date: Wed, 25 Jan 2012 05:11:24 GMT Client-Warning: Internal response Can't connect to previewtest.clverify.com:443 (certificate verify failed) 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 に答える