2

C で OpenSSL ライブラリを使用して、完全な証明書チェーンを PEM ファイルからメモリにロードする最良の方法は何ですか? 入力は、1..n 個の証明書が連結された単一の 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、最初の証明書を を使用して取得できますが、証明書チェーンの残りをコンテキストから取得するAPI 関数SSL_get_certificate()はないようです。SSL

では、ファイルから証明書チェーンをロードする最良の方法は何でしょうか?

4

1 に答える 1

4

この関数SSL_CTX_use_certificate_chain_fileは、タイプがでSSL_CTX::certあるチェーン内のすべての追加の証明書 (追加の CA 証明書) に証明書を入れるため、追加のチェーンを取得するには、次のようにします。SSL_CTX::extra_certsSTACK_OF(X509)*

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

extra_cets構造内で直接アクセスせずにフィールドを提供できるマクロや関数は見つかりませんでしたがSSL_CTX、OpenSSL コードを見ると、どこでも直接アクセスしています。

于 2012-03-21T00:03:32.480 に答える