我很难获得使用新LWP(6.x)的PKCS12证书。基本上,此代码下perl5.8.8老Crypt::SSLeay(版本0.57)和LWP(版本5.826):如何将PKCS12 SSL证书与更新的LWP一起使用?
local $ENV{HTTPS_PKCS12_PASSWORD} = $sslPassword;
local $ENV{HTTPS_PKCS12_FILE} = $pkcs12_cert;
my $response = LWP::UserAgent->new->request(POST($url, Content => $content));
...但在perl5.14.2不和地穴的最新版本:: SSLeay的0.64)和LWP(6.03)。
通过不工作,我的意思是,我得到一个HTTP :: Response对象回来就好:
bless({
'_content' => 'Can\'t connect to host:port
',
'_rc' => 500,
'_headers' => bless({
'client-warning' => 'Internal response',
'client-date' => 'Thu, 27 Sep 2012 18:28:34 GMT',
'content-type' => 'text/plain'
}, 'HTTP::Headers'),
'_msg' => 'Can\'t connect to host:port',
'_request' => ...
)
据我所知,很多SSL相关的代码已经在最近LWP改变;已知PKCS12支持仍然有效?我应该设置不同的变量/选项以获取证书和密码吗?
我也试过这个传递给LWP :: UserAgent->新的,没有运气:
ssl_opts => {
SSL_use_cert => 1,
SSL_cert_file => $pkcs12_cert,
SSL_passwd_cb => sub { $sslPassword },
}
后续:我转换PKCS12证书的PEM:
openssl pkcs12 -in my_pkcs12.p12 -out mycert.pem -clcerts -nokeys
openssl pkcs12 -in my_pkcs.p12 -out mykey.pem -nocerts
<passphrase entered>
,并可以通过使用新的文件:
curl -k --cert mycert.pem --key mykey.pem --pass passphrase --cert-type PEM https://url
...并设置在测试脚本这些环境变量:
$ENV{HTTPS_CERT_FILE} = 'mycert.pem';
$ENV{HTTPS_KEY_FILE} = 'mykey.pem';
...和是作品以及下旧的LWP,并重新在新的LWP不工作..所以至少它是不一些特定于PKCS12证书的问题,但更重要的是SSL处理在内部发生了变化。
后续跟进,一年后...我将PKCS12证书转换成不同的格式,并用它来代替 - 并且挑剔我的供应商合作伙伴选择该格式。 – Ether