Dopo aver installato OpenCA e aver impostato l'Autorità di certificazione (CA), ho riscontrato un errore:"Verifica della firma non riuscita sulla chiave pubblica SPKAC " durante la firma della richiesta di certificato dell'entità finale sul computer della 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 ).
Sto usando openca-base-1.5.0 e openca-tools-1.3.0
Debug:
- Ho abilitato l'opzione di debug in OpenCA e ho trovato il comando OpenSSL che firma il certificato utente. Di seguito è riportato lo snapshot del debug.
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
Altro dal debug...
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
L'errore "verifica della firma non riuscita sulla chiave pubblica SPKAC " dice chiaramente che il problema è durante la firma della chiave pubblica SPKAC – La richiesta è stata generata nella finestra del browser degli utenti come mostrato di seguito:
La richiesta generata dal browser è costituita dalla chiave pubblica SPKAC e dalla firma. L'SPKAC probabilmente usa MD5
nella sua firma. Non è sicuro e OpenSSL non verifica le firme che utilizzano MD5
per impostazione predefinita.
Quindi, come diciamo a OpenSSL di accettare richieste che utilizzano MD5? Ecco com'è.
Come correggere la verifica della firma non riuscita sulla chiave pubblica SPKAC
Imposta la variabile d'ambiente OPENSSL_ENABLE_MD5_VERIFY
come soluzione alternativa per consentire a OpenSSL di firmare richieste che utilizzano MD5. Poiché OpenCA utilizza le sessioni, non puoi semplicemente impostare la variabile di ambiente sulla riga di comando. Devi impostarlo in modo programmatico, in modo che ogni volta che OpenCA utilizza il comando OpenSSL per firmare, dovrebbe essere impostato.
Quindi, imposta la variabile d'ambiente OPENSSL_ENABLE_MD5_VERIFY
in /home/openca/lib/openca/perl_modules/perl5/x86_64-linux-thread-multi/OpenCA/OpenSSL.pm
file:
Cerca la riga:# eseguendo il comando OpenSSL
Di seguito è riportato il codice, dove avviene la firma del certificato.
$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; }
Prima di eseguire il codice precedente, è necessario impostare la variabile di ambiente come mostrato di seguito:
$ENV{OPENSSL_ENABLE_MD5_VERIFY} = 0;
Ora riavvia il demone OpenCA e firma il tuo certificato utente. Dovrebbe funzionare.
Via Bugzilla