Dopo aver installato OpenCA e aver emesso il certificato CA, facendo clic sul numero di serie del certificato CA viene visualizzato il seguente errore.
Error Code: 6295020 [initServer:314] Cannot load certificate 404576247583593287078701 from the database.
Nonostante l'abilitazione dell'opzione di debug, non sono riuscito a trovare alcun messaggio di errore rilevante in stderror.log .
- L'interfaccia elenca il certificato CA, ma non riesce a visualizzare le informazioni sul certificato durante l'esecuzione di
viewCert or viewCertFulloperazioni cmd. - Ho verificato il CA_Certificate memorizzato nel database PostgreSQL e sembra essere valido e VALIDO.
- La stringa di query nell'URI sembra andare bene con il
dataTypeopportunamente menzionato come di seguito:
cmd=viewCert&dataType=VALID_CA_CERTIFICATE&key=4045762475835932870787014.
- Di solito i comandi eseguiti da
lib/cmdsè configurato inetc/openca/access_control/*.xmlfile e tutto sembra essere configurato correttamente.
Allora perché si verifica questo errore? Fortunatamente ho trovato una soluzione ed eccola qui.
Come correggere l'errore – Errore OpenCA Impossibile caricare il certificato dal database
- Il
listCertscontiene la subroutinecmdListCertsche accetta la$querye lo analizza. $dataTypeè una delle cose che estrae.@certsListviene riempito dalla query del database, che sembra funzionare per elencare ilCA_CERTIFICATE.$typeè compilato da$dataTypeanalizzato dal collegamento che chiama lo script. Quindi, questo dovrebbe apparire come argomento della query"dataType"nel link dietro ilseriale facendo clic su quel link dovrebbe essere inviato aviewCert. Di nuovo,$dataTypeviene analizzato da$queryproprio come perlistCerts, ma in qualche modo questo non funziona correttamente nella mia configurazione OpenCA.
Sospettavo il modo in cui viewCert distingue tra CERTIFICATE e
CA_CERTIFICATE e il modo in cui vengono gestite le varie richieste di certificati validi, scaduti,
sospesi e revocati.
Quindi ecco una modifica al viewCert cmd nel file lib/openca/perl_modules/perl5/OpenCA/AC.pm
Vai alla sub-routine getOwner dove troverai quanto segue:
sub getOwner {
Individua la riga:# load the certificate
Sostituisci le righe sotto
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");
} Con:
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");
}
Il problema riguardava la riga: if( not (@certs = $self->{db}->searchItems (.
Questo è tutto! Spero che aiuti qualcuno là fuori.