1

OpenSSL が提供する例を使用して、v3 拡張機能を持つ証明書要求を作成する際に問題が発生しています。このコード全体は、Openssl/demos/x509/ の mkreq.c にあります。

いくつかの x509v3 拡張機能を証明書要求に追加するとうまくいきます。キーの使用法またはサブジェクトの代替名を追加できます

add_ext(exts, NID_key_usage, "critical,digitalSignature,keyEncipherment");
add_ext(exts, NID_subject_alt_name, "email:steve@openssl.org");

しかし、AuthorityKeyIdentifier を追加しようとすると、これは機能しません...

add_ext(exts, NID_authority_key_identifier, "keyid,issuer");

add_ext も mkreq で提供されます。

int add_ext(STACK_OF(X509_REQUEST) *sk, int nid, char *value)
{
X509_EXTENSION *ex;
ex = X509V3_EXT_conf_nid(NULL, NULL, nid, value);
if (!ex)
    return 0;
sk_X509_EXTENSION_push(sk, ex);

return 1;
}

一部の拡張機能が機能し、一部が機能しない理由を誰かが知っていますか? 自己署名に同じ拡張子を追加すると、うまく機能します...

4

2 に答える 2

1

以下は共有する価値があると思いますが、これがあなたの状況に関連しているかどうかはわかりません.

コマンド ラインで自己署名証明書を生成する場合、一部の拡張子の順序が重要になります。keyid を機関キー ID として使用する場合は、最初に subjectKeyIdentifier を宣言する必要があります。

subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid,issuer

その場合、authorityKeyIdentifier にはキー ID が入力され、発行者は使用されません。

逆の順序で宣言すると、authorityKeyIdentifier は代わりに発行者で埋められます。おそらく、プログラムが subjectKeyIdentifier に基づいて authorityKeyIdentifier を初期化しようとするためです。

を宣言した場合authorityKeyIdentifier = keyid:always、keyid が不明であるため、ハード エラーがスローされます。

それが誰かを助けることを願っています。それに取り組むのにしばらく時間がかかりました。

于 2015-07-09T21:50:06.147 に答える