2012-03-20 111 views
1

在c中使用OpenSSL庫,從PEM文件加載完整證書鏈到內存的最佳方式是什麼?輸入是單個PEM文件,並有1..n個證書級聯,輸出應該是STACK_OF(X509)*使用OpenSSL從PEM文件加載證書鏈到STACK_OF(X509)*使用OpenSSL *

對於單證書,加載它們的最簡單的方法如下:

SSL_CTX *sslctx = SSL_CTX_new(SSLv23_server_method()); 
SSL_CTX_use_certificate_file(sslctx, "certificate.pem", SSL_FILETYPE_PEM); 
SSL *ssl = SSL_new(sslctx); 
X509 *crt = SSL_get_certificate(ssl); 

(錯誤處理,資源釋放和參考計數爲清楚起見省略;使用C99語法;「容易」,意思是「避免較低的水平BIO和ASN.1的API「)

然而,對於完整的證書鏈,SSL_CTX_use_certificate_chain_file()可用於它們加載到SSL_CTX和第一個證書,然後可以使用SSL_get_certificate()檢索,但似乎沒有API function檢索來自一個證書鏈的其餘部分SSL上下文。

那麼從文件加載證書鏈的最佳方式是什麼?

回答

3

功能SSL_CTX_use_certificate_chain_file會將證書導入SSL_CTX::cert和所有其他證書鏈(額外CA cetrificates)到SSL_CTX::extra_certs哪種類型STACK_OF(X509)*,所以讓你的額外鏈:

STACK_OF(X509)* ca_stack = sslctx->extra_certs; 

我找不到任何宏或函數可以給你extra_cets字段,而不需要直接在SSL_CTX結構中訪問它,但是看着OpenSSL代碼,他們直接在任何地方訪問它。

+0

FTR,OpenSSL 1.0.2終於引入了SSL_CTX_get0_chain_certs()來訪問附加證書。 – 2015-07-03 11:21:04

+0

@Daniel Roethlisberger,謝謝,很高興知道 – sirgeorge 2015-07-05 01:37:10

相關問題