Une fois l'OpenCA installé et le certificat CA émis, cliquer sur le numéro de série du certificat CA génère l'erreur ci-dessous.
Error Code: 6295020 [initServer:314] Cannot load certificate 404576247583593287078701 from the database.
Malgré l'activation de l'option de débogage, je n'ai trouvé aucun message d'erreur pertinent dans stderror.log
.
- L'interface répertorie le certificat CA, mais ne parvient pas à afficher les informations de certificat lors de l'exécution de
viewCert or viewCertFull
opérations cmd. - J'ai vérifié le CA_Certificate stocké dans la base de données PostgreSQL et il semble correct et VALIDE.
- La chaîne de requête dans l'URI semble convenir au
dataType
correctement mentionné comme ci-dessous :
cmd=viewCert&dataType=VALID_CA_CERTIFICATE&key=4045762475835932870787014.
- Généralement, les commandes exécutées depuis
lib/cmds
est configuré dansetc/openca/access_control/*.xml
fichiers et tout semble être correctement configuré.
Alors pourquoi cette erreur se produit-elle ? Heureusement trouvé une solution et la voici.
Comment corriger l'erreur - Erreur OpenCA Impossible de charger le certificat à partir de la base de données
- Les
listCerts
le fichier contient la sous-routinecmdListCerts
qui prend la$query
et l'analyse. $dataType
est l'une des choses qu'il extrait.@certsList
est rempli par la requête de base de données, qui semble fonctionner pour lister leCA_CERTIFICATE
.$type
est rempli par$dataType
analysé à partir du lien appelant le script. Donc, cela devrait apparaître comme argument de requête"dataType"
dans le lien derrière leserial
et en cliquant sur ce lien, il doit être envoyé auviewCert
. Là encore,$dataType
est analysé à partir de$query
comme c'était le cas pourlistCerts
, mais cela ne fonctionne pas correctement dans ma configuration OpenCA.
Je soupçonnais la façon dont viewCert
fait la distinction entre CERTIFICATE et
CA_CERTIFICATE et la manière dont les différentes requêtes pour les certificats valides, expirés,
suspendus et révoqués sont traitées.
Voici donc une modification du viewCert
cmd dans le fichier lib/openca/perl_modules/perl5/OpenCA/AC.pm
Accédez à la sous-routine getOwner
où vous trouverez les éléments suivants :
sub getOwner {
Localisez la ligne :# load the certificate
Remplacez les lignes ci-dessous
my @certs; my $certype = "CERTIFICATE"; if( not (@certs = $self->{db}->searchItems ( KEY => $self->{acl}->{object}, DATATYPE => "CERTIFICATE"))) { # if (length ($self->{acl}->{object}) < 60 ) { # @certs = $self->{db}->searchItems (KEY => $self->{acl}->{object}, DATATYPE => "CERTIFICATE"); #} $certtype = "CA_CERTIFICATE"; @certs = $self->{db}->searchItems ( KEY => $self->{acl}->{object}, DATATYPE => "CERTIFICATE"); }
Avec :
my @certs; my $certtype = "CERTIFICATE"; if( $self->{db}->searchItems ( KEY => $self->{acl}->{object}, DATATYPE => "CERTIFICATE")) { $certtype = "CA_CERTIFICATE"; @certs = $self->{db}->searchItems ( KEY => $self->{acl}->{object}, DATATYPE => "CERTIFICATE"); } else { $certtype = "CA_CERTIFICATE"; @certs = $self->{db}->searchItems ( KEY => $self->{acl}->{object}, DATATYPE => "CA_CERTIFICATE"); }
Le problème concernait la ligne : if( not (@certs = $self->{db}->searchItems (.
C'est ça! J'espère que cela aidera quelqu'un là-bas.