我很難獲得使用新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