2012-03-20 4 views
1

cでOpenSSLライブラリを使用して、PEMファイルから完全な証明書チェーンをメモリに読み込む最良の方法は何ですか?入力は1..n証明書が連結された単一のPEMファイルで、出力はSTACK_OF(X509)*でなければなりません。次のように単一の証明書についてはOpenSSLを使用してPEMファイルからSTACK_OF(X509)*に証明書チェーンをロード

、それらをロードする最も簡単な方法は次のとおりです。

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コンテキスト。

したがって、ファイルから証明書チェーンをロードする最も良い方法は何ですか?私はいずれかを見つけることができませんでした

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

答えて

3

機能SSL_CTX_use_certificate_chain_fileはので、あなたの追加のチェーンを取得するには、STACK_OF(X509)*あるタイプSSL_CTX::extra_certsSSL_CTX::certに証明書を入れて、チェーン内のすべての追加の証明書(追加のCAのcetrificates)マクロまたは関数を使用して、SSL_CTX構造体に直接アクセスせずにextra_cetsフィールドを取得できますが、OpenSSLコードを見れば、どこでも直接アクセスできます。

+0

FTRでは、OpenSSL 1.0.2がSSLCTX_get0_chain_certs()を導入して、追加の証明書にアクセスしました。 –

+0

@Daniel Roethlisberger、ありがとう、よく知る – sirgeorge

関連する問題