OpenCAをインストールして認証局(CA)を設定した後、「SPKAC公開鍵で署名の検証に失敗しました」というエラーが発生しました。 」CAマシンでエンドエンティティ証明書要求に署名している間。
Error while issuing Certificate to David (filename: /home/openca/var/openca/tmp/4229D72DA1BA34B416B9.req). OpenCA::OpenSSL returns errocode 7731075 (OpenCA::OpenSSL->issueCert: OpenSSL fails (7777067). Using configuration from /home/openca/etc/openca/openssl/openssl/User.conf Check that the SPKAC request matches the signature Signature verification failed on SPKAC public key 140250398984096:error:0D06407A:asn1 encoding routines:a2d_ASN1_OBJECT:first num too large:a_object.c:108: 140250398984096:error:0D0C50A1:asn1 encoding routines:ASN1_item_verify:unknown message digest algorithm:a_verify.c:206: error in ca ).
openca-base-1.5.0とopenca-tools-1.3.0を使用しています
デバッグ:
- OpenCAでデバッグオプションを有効にして、ユーザー証明書に署名するOpenSSLコマンドを見つけました。以下は、デバッグのスナップショットです。
OpenCA::OpenSSL->_execute_command: ca -batch -config /home/openca/etc/openca/openssl/openssl/User.conf -keyfile /home/openca/var/openca/crypto/keys/cakey.pem -passin env:pwd -extfile /home/openca/var/openca/tmp/User.ext -preserveDN -subj "/O=OpenCA Labs/OU=Users/CN=David" -spkac /home/openca/var/openca/tmp/4229D72DA1BA34B416B9.req
デバッグの詳細…
OpenCA::OpenSSL->setError: errno: 7731075 OpenCA::OpenSSL->setError: errval: OpenCA::OpenSSL->issueCert: OpenSSL fails (7777067). Using configuration from /home/openca/etc/openca/openssl/openssl/User.conf Check that the SPKAC request matches the signature signature verification failed on SPKAC public key 140030475425696:error:0D06407A:asn1 encoding routines:a2d_ASN1_OBJECT:first num too large:a_object.c:108: 140030475425696:error:0D0C50A1:asn1 encoding routines:ASN1_item_verify:unknown message digest algorithm:a_verify.c:206: error in ca
エラー「SPKAC公開鍵での署名の検証に失敗しました 」は、問題がSPKAC公開鍵の署名中に発生していることを明確に示しています–リクエストは、以下に示すようにユーザーのブラウザウィンドウで生成されました:
ブラウザで生成されたリクエストは、SPKAC公開鍵と署名で構成されています。 SPKACはおそらくMD5
を使用します その署名で。これは安全ではなく、OpenSSLはMD5
を使用する署名を検証しません デフォルトで。
では、MD5を使用するリクエストを受け入れるようにOpenSSLに指示するにはどうすればよいでしょうか。方法は次のとおりです。
SPKAC公開鍵で署名の検証に失敗した問題を修正する方法
環境変数を設定しますOPENSSL_ENABLE_MD5_VERIFY
OpenSSLがMD5を使用するリクエストに署名できるようにするための回避策として。 OpenCAはセッションを使用するため、コマンドラインで環境変数を設定するだけでは不十分です。プログラムで設定する必要があります。これにより、OpenCAがOpenSSLコマンドを使用して署名するたびに、設定する必要があります。
したがって、環境変数OPENSSL_ENABLE_MD5_VERIFY
を設定します。 /home/openca/lib/openca/perl_modules/perl5/x86_64-linux-thread-multi/OpenCA/OpenSSL.pm
ファイル:
次の行を検索します:#OpenSSLコマンドの実行
以下は、証明書署名が行われるコードです。
$self->_debug ("issueCert: openssl=$command"); $ENV{'pwd'} = "$passwd"; $ret = $self->_execute_command (COMMAND => $command, KEY_USAGE => $engine); delete ($ENV{'pwd'}); unlink ($reqfile) if ($reqdata); if( not $ret ) { $self->setError (7731075, $self->{gettext} ("OpenCA::OpenSSL->issueCert: OpenSSL fails (__ERRNO__). __ERRVAL__", "__ERRNO__", $self->errno, "__ERRVAL__", $self->errval)); return undef; }
上記のコードを実行する前に、以下に示すように環境変数を設定する必要があります。
$ENV{OPENSSL_ENABLE_MD5_VERIFY} = 0;
次に、OpenCAデーモンを再起動し、ユーザー証明書に署名します。動作するはずです。
Bugzilla経由