Après avoir installé OpenCA et configuré l'autorité de certification (CA), j'ai rencontré une erreur - "La vérification de la signature a échoué sur la clé publique SPKAC " lors de la signature de la demande de certificat d'entité finale sur la machine CA.
Erreur lors de l'émission du certificat à David (nom de fichier :/home/openca/var/openca/tmp/4229D72DA1BA34B416B9.req).OpenCA::OpenSSL renvoie le code d'erreur 7731075 (OpenCA::OpenSSL->issueCert :OpenSSL échoue (7777067). Utilisation de la configuration de /home/openca/etc/openca/openssl/openssl/User.confVérifiez que la requête SPKAC correspond à la signatureLa vérification de la signature a échoué sur la clé publique SPKAC140250398984096 :erreur :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).
J'utilise openca-base-1.5.0 et openca-tools-1.3.0
Débogage :
- J'ai activé l'option de débogage dans OpenCA et j'ai trouvé la commande OpenSSL qui signe le certificat utilisateur. Vous trouverez ci-dessous l'instantané du débogage.
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
En savoir plus sur le débogage…
OpenCA::OpenSSL->setError :errno :7731075OpenCA::OpenSSL->setError :errval :OpenCA::OpenSSL->issueCert :OpenSSL échoue (7777067). Utilisation de la configuration de /home/openca/etc/openca/openssl/openssl/User.confVérifiez que la requête SPKAC correspond à la signaturela vérification de la signature a échoué sur la clé publique SPKAC140030475425696 :erreur :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'erreur "la vérification de la signature a échoué sur la clé publique SPKAC " indique clairement que le problème est lors de la signature de la clé publique SPKAC - La demande a été générée sur la fenêtre du navigateur de l'utilisateur comme indiqué ci-dessous :
La requête générée par le navigateur se compose de la clé publique et de la signature SPKAC. Le SPKAC utilise probablement MD5
dans sa signature. Ce n'est pas sécurisé et OpenSSL ne vérifie pas les signatures qui utilisent MD5
par défaut.
Alors, comment dire à OpenSSL d'accepter les requêtes qui utilisent MD5 ? Voici comment c'est.
Comment réparer l'échec de la vérification de signature sur la clé publique SPKAC
Définissez la variable d'environnement OPENSSL_ENABLE_MD5_VERIFY
comme solution de contournement pour permettre à OpenSSL de signer des requêtes utilisant MD5. Comme OpenCA utilise des sessions, vous ne pouvez pas simplement définir la variable d'environnement sur la ligne de commande. Vous devez le définir par programme, de sorte que chaque fois qu'OpenCA utilise la commande OpenSSL pour signer, il doit être défini.
Donc, définissez la variable d'environnement OPENSSL_ENABLE_MD5_VERIFY
dans /home/openca/lib/openca/perl_modules/perl5/x86_64-linux-thread-multi/OpenCA/OpenSSL.pm
fichier :
Recherchez la ligne :# exécution de la commande OpenSSL
Ci-dessous se trouve le code, où la signature du certificat se produit.
$self->_debug ("issueCert :openssl=$command"); $ENV{'pwd'} ="$passwd" ; $ret =$self->_execute_command (COMMAND => $command, KEY_USAGE => $engine); supprimer ($ENV{'pwd'}); unlink ($reqfile) if ($reqdata); if( not $ret ) { $self->setError (7731075, $self->{gettext} ("OpenCA::OpenSSL->issueCert :OpenSSL échoue (__ERRNO__). __ERRVAL__", "__ERRNO__", $self->errno , "__ERRVAL__", $self->errval)); retourner undef; }Avant d'exécuter le code ci-dessus, vous devez définir la variable d'environnement comme indiqué ci-dessous :
$ENV{OPENSSL_ENABLE_MD5_VERIFY} =0 ;Redémarrez maintenant le démon OpenCA et signez votre certificat utilisateur. Cela devrait fonctionner.
Via Bugzilla