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 viewCertFullopé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
dataTypecorrectement mentionné comme ci-dessous :
cmd=viewCert&dataType=VALID_CA_CERTIFICATE&key=4045762475835932870787014.
- Généralement, les commandes exécutées depuis
lib/cmdsest configuré dansetc/openca/access_control/*.xmlfichiers 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
listCertsle fichier contient la sous-routinecmdListCertsqui prend la$queryet l'analyse. $dataTypeest l'une des choses qu'il extrait.@certsListest rempli par la requête de base de données, qui semble fonctionner pour lister leCA_CERTIFICATE.$typeest rempli par$dataTypeanalysé à partir du lien appelant le script. Donc, cela devrait apparaître comme argument de requête"dataType"dans le lien derrière leserialet en cliquant sur ce lien, il doit être envoyé auviewCert. Là encore,$dataTypeest analysé à partir de$querycomme 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.