4

我无法使以下代码正常工作并且遇到困难。我正在尝试在 POST 请求期间使用证书执行客户端身份验证。我只对将客户端证书发送到服务器感兴趣,并不需要检查服务器证书。

这是尝试复制的 cUrl 命令:

curl --cacert caCertificate.pem --cert clientCertificate.pem -d "string" https://xx.xx.xx.xx:8443/postRf

我的 Perl 脚本中不断出现以下错误: ssl handshake failure

我猜我有两个问题:对于 CRT7 和 KEY8 变量,我应该指向什么?这是使用客户端证书身份验证发送 POST 请求的最佳方式吗?

!/usr/bin/perl
use warnings;
use strict;
use Net::SSLeay qw(post_https);


my $$hostIp = "xx.xx.xx.xx" 
my $hostPort = "8443" 
my $postCommand = "/postRf/string";
my $http_method = 'plain/text';
my $path_to_crt7 = 'pathToCert.pem';
my $path_to_key8 = 'pathToKey.pem';

my ($page, $response, %reply_headers) =
        post_https($hostIp, $hostPort, $postCommand, '',
        $http_method, $path_to_crt7, $path_to_key8
);

print $page . "\n";
print $response . "\n";
4

1 回答 1

2

请参阅LWP::UserAgentIO::Socket::SSL

use strictures;
use LWP::UserAgent qw();
require LWP::Protocol::https;

my $ua = LWP::UserAgent->new;
$ua->ssl_opts(
    SSL_ca_file   => 'caCertificate.pem',
    SSL_cert_file => 'clientCerticate.pem',
);
$ua->post(
    'https://xx.xx.xx.xx:8443/postRf',
    Content => 'string',
);

我没有测试过这段代码。

于 2012-05-15T19:58:31.700 回答