Po instalaci OpenCA a nastavení certifikační autority (CA) jsem narazil na chybu – „Ověření podpisu na veřejném klíči SPKAC se nezdařilo ” při podepisování žádosti o certifikát koncové entity na počítači 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 ).
Používám openca-base-1.5.0 a openca-tools-1.3.0
Ladění:
- Povolil jsem možnost ladění v OpenCA a našel jsem příkaz OpenSSL, který podepisuje uživatelský certifikát. Níže je snímek z ladění.
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
Více z ladění…
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
Chyba „Ověření podpisu na veřejném klíči SPKAC se nezdařilo “ jasně říká, že problém je při podepisování veřejného klíče SPKAC – Požadavek byl vygenerován v okně prohlížeče uživatele, jak je uvedeno níže:
Požadavek vygenerovaný prohlížečem se skládá z veřejného klíče SPKAC a podpisu. SPKAC pravděpodobně používá MD5
ve svém podpisu. To je nejisté a OpenSSL neověřuje podpisy, které používají MD5
ve výchozím nastavení.
Jak tedy řekneme OpenSSL, aby přijímalo požadavky, které používají MD5? Tady je návod.
Jak opravit Ověření podpisu se nezdařilo na veřejném klíči SPKAC
Nastavte proměnnou prostředí OPENSSL_ENABLE_MD5_VERIFY
jako řešení umožňující OpenSSL podepisovat požadavky, které používají MD5. Protože OpenCA používá relace, nemůžete pouze nastavit proměnnou prostředí na příkazovém řádku. Musíte to nastavit programově, takže kdykoli OpenCA použije k podpisu příkaz OpenSSL, měl by být nastaven.
Takže nastavte proměnnou prostředí OPENSSL_ENABLE_MD5_VERIFY
v /home/openca/lib/openca/perl_modules/perl5/x86_64-linux-thread-multi/OpenCA/OpenSSL.pm
soubor:
Vyhledejte řádek:# spuštěním příkazu OpenSSL
Níže je kód, kde probíhá podepisování certifikátu.
$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; }
Před provedením výše uvedeného kódu musíte nastavit proměnnou prostředí, jak je uvedeno níže:
$ENV{OPENSSL_ENABLE_MD5_VERIFY} = 0;
Nyní restartujte démona OpenCA a podepište svůj uživatelský certifikát. Mělo by to fungovat.
Přes Bugzilla