Una vez que se instala OpenCA y se emite el certificado de CA, al hacer clic en el número de serie del certificado de CA se muestra el siguiente error.
Error Code: 6295020 [initServer:314] Cannot load certificate 404576247583593287078701 from the database.
A pesar de habilitar la opción de depuración, no pude encontrar ningún mensaje de error relevante en stderror.log .
- La interfaz enumera el certificado de CA, pero no muestra la información del certificado al ejecutar
viewCert or viewCertFulloperaciones cmd. - Verifiqué el CA_Certificate almacenado en la base de datos de PostgreSQL y parece estar bien y VÁLIDO.
- La cadena de consulta en URI parece estar bien con el
dataTypecorrectamente mencionado a continuación:
cmd=viewCert&dataType=VALID_CA_CERTIFICATE&key=4045762475835932870787014.
- Por lo general, los comandos se ejecutan desde
lib/cmdsestá configurado enetc/openca/access_control/*.xmlarchivos y todo parece estar configurado correctamente.
Entonces, ¿por qué ocurre este error? Afortunadamente encontré una solución y aquí está.
Cómo solucionar el error:error de OpenCA No se puede cargar el certificado de la base de datos
- La
listCertsEl archivo contiene la subrutinacmdListCertsque toma la$queryy lo analiza. $dataTypees una de las cosas que extrae.@certsListse completa con la consulta de la base de datos, que parece funcionar para enumerar elCA_CERTIFICATE.$typese completa con$dataTypeanalizado desde el enlace que llama al script. Entonces, esto debería aparecer como argumento de consulta"dataType"en el enlace detrás delserialy al hacer clic en ese enlace, debe enviarse aviewCert. Allí nuevamente,$dataTypese analiza desde$querytal como lo fue paralistCerts, pero de alguna manera esto no funciona correctamente en mi configuración de OpenCA.
Sospeché la forma viewCert distingue entre CERTIFICATE y
CA_CERTIFICATE y la forma en que se manejan varias consultas de certificados válidos, caducados,
suspendidos y revocados.
Así que aquí hay una modificación al viewCert cmd en el archivo lib/openca/perl_modules/perl5/OpenCA/AC.pm
Navegue a la subrutina getOwner donde encontrará lo siguiente:
sub getOwner {
Busque la línea:# load the certificate
Reemplace las siguientes líneas
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");
}
El problema estaba en la línea: if( not (@certs = $self->{db}->searchItems (.)
¡Eso es todo! Espero que ayude a alguien por ahí.