Sobald OpenCA installiert und das CA-Zertifikat ausgestellt ist, wird beim Klicken auf die Seriennummer des CA-Zertifikats der folgende Fehler ausgegeben.
Error Code: 6295020 [initServer:314] Cannot load certificate 404576247583593287078701 from the database.
Trotz aktivierter Debug-Option konnte ich keine relevanten Fehlermeldungen in stderror.log
finden .
- Die Schnittstelle listet das CA-Zertifikat auf, zeigt die Zertifikatsinformationen jedoch nicht an, während
viewCert or viewCertFull
ausgeführt wird cmd-Operationen. - Ich habe das in der PostgreSQL-Datenbank gespeicherte CA_Certificate überprüft und es scheint in Ordnung und GÜLTIG zu sein.
- Die Abfragezeichenfolge in URI scheint mit dem
dataType
in Ordnung zu sein richtig wie folgt erwähnt:
cmd=viewCert&dataType=VALID_CA_CERTIFICATE&key=4045762475835932870787014.
- Normalerweise die Befehle, die von
lib/cmds
ausgeführt werden wird inetc/openca/access_control/*.xml
konfiguriert Dateien und alles scheint richtig konfiguriert zu sein.
Warum tritt dieser Fehler auf? Glücklicherweise eine Lösung gefunden und hier ist sie.
So beheben Sie den Fehler – OpenCA-Fehler Zertifikat kann nicht aus der Datenbank geladen werden
- Die
listCerts
Datei enthält die UnterroutinecmdListCerts
was die$query
nimmt und parst es. $dataType
ist eines der Dinge, die es extrahiert.@certsList
wird von der Datenbankabfrage gefüllt, die zum Auflisten desCA_CERTIFICATE
zu funktionieren scheint .$type
wird durch$dataType
ausgefüllt aus dem Link analysiert, der das Skript aufruft. Dies sollte also als Abfrageargument"dataType"
erscheinen im Link hinter derserial
und durch Klicken auf diesen Link sollte es anviewCert
gesendet werden . Dort wieder$dataType
wird von$query
geparst genauso wie es fürlistCerts
war , aber irgendwie funktioniert das in meinem OpenCA-Setup nicht richtig.
Ich vermutete den Weg viewCert
unterscheidet zwischen CERTIFICATE und
CA_CERTIFICATE und wie verschiedene Abfragen für gültige, abgelaufene,
suspendierte und widerrufene Zertifikate behandelt werden.
Hier ist also eine Modifikation des viewCert
cmd in der Datei lib/openca/perl_modules/perl5/OpenCA/AC.pm
Navigieren Sie zur Unterroutine getOwner
wo Sie Folgendes finden:
sub getOwner {
Suchen Sie die Zeile:# load the certificate
Ersetzen Sie die folgenden Zeilen
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"); }
Mit:
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"); }
Das Problem war mit der Zeile: if( not (@certs = $self->{db}->searchItems (.
Das ist es! Hoffe, es hilft jemandem da draußen.