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 viewCertFull
operazioni 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
dataType
opportunamente 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/*.xml
file 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
listCerts
contiene la subroutinecmdListCerts
che accetta la$query
e lo analizza. $dataType
è una delle cose che estrae.@certsList
viene riempito dalla query del database, che sembra funzionare per elencare ilCA_CERTIFICATE
.$type
è compilato da$dataType
analizzato dal collegamento che chiama lo script. Quindi, questo dovrebbe apparire come argomento della query"dataType"
nel link dietro ilserial
e facendo clic su quel link dovrebbe essere inviato aviewCert
. Di nuovo,$dataType
viene analizzato da$query
proprio 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.