2013-02-17 84 views
1

Perl新手在這裏。 我需要將中級CA x509證書鏈接到我的客戶端證書。如何在Perl中鏈接SSL證書?

Net::SSLeay::set_cert_and_key($ctx, $crt, $key); 
my $bio = Net::SSLeay::BIO_new_file("subca.crt", 'r'); 
my $x509 = Net::SSLeay::PEM_read_bio_X509($bio); 
Net::SSLeay::CTX_add_extra_chain_cert($ctx, $x509) 
    and die_if_ssl_error("CTX_add_extra_chain_cert"); # It dies here. 

該證書採用pem格式。誰能幫忙?

編輯:我發現對「Net :: SSLeay :: PEM_read_bio_X509()」的調用返回0,這是一個錯誤條件。

+0

它死去的錯誤是什麼?我認爲PEM_read_bio()可能會返回對數組的引用,並且您必須分別在引用中添加每個證書。查看[IO :: Socket :: SSL源代碼](http://cpansearch.perl.org/src/SULLR/IO-Socket-SSL-1.84/lib/IO/Socket/SSL.pm)。 – hrunting 2013-02-17 20:59:27

+0

我不知道如何得到有意義的錯誤描述。它像那樣死亡:「20397:CTX_add_extra_chain_cert」 – gege 2013-02-17 21:11:55

+0

什麼類型的對象或引用是'$ x509'? – hrunting 2013-02-18 01:36:08

回答

0

這不正是我一直在尋找:

Net::SSLeay::CTX_use_RSAPrivateKey_file($ctx, $key, &Net::SSLeay::FILETYPE_PEM) 
    and die_if_ssl_error("private key"); 
Net::SSLeay::CTX_use_certificate_chain_file($ctx, $crt) 
    and die_if_ssl_error("CTX_use_certificate_chain_file"); 

$ CRT包含2個證書,第一個客戶端證書,其次是中間一個。