OpenCAがインストールされ、CA証明書が発行されたら、CA証明書のシリアル番号をクリックすると以下のエラーがスローされます。
Error Code: 6295020 [initServer:314] Cannot load certificate 404576247583593287078701 from the database.
デバッグオプションを有効にしましたが、stderror.log
に関連するエラーメッセージが見つかりませんでした 。
- インターフェイスにはCA証明書が一覧表示されますが、
viewCert or viewCertFull
の実行中に証明書情報を表示できません cmd操作。 - PostgreSQLデータベースに保存されているCA_Certificateを確認しましたが、問題なく有効であるようです。
- URIのクエリ文字列は
dataType
で問題ないようです 以下のように適切に言及されています:
cmd=viewCert&dataType=VALID_CA_CERTIFICATE&key=4045762475835932870787014.
- 通常、
lib/cmds
から実行されるコマンドetc/openca/access_control/*.xml
で構成されます ファイルとすべてが適切に構成されているようです。
では、なぜこのエラーが発生するのでしょうか。幸いなことに解決策が見つかりました。ここにあります。
エラーを修正する方法–OpenCAエラーデータベースから証明書を読み込めません
-
listCerts
ファイルには、サブルーチンcmdListCerts
が含まれています$query
を取ります そしてそれを解析します。 -
$dataType
抽出するものの1つです。 -
@certsList
CA_CERTIFICATE
を一覧表示するために機能するように見えるデータベースクエリで埋められます 。 -
$type
$dataType
で入力されます スクリプトを呼び出すリンクから解析されます。したがって、これはクエリ引数"dataType"
として表示されます。serial
の後ろのリンクにあります そのリンクをクリックすると、viewCert
に送信されます。 。ここでも、$dataType
$query
から解析されますlistCerts
の場合と同じように 、しかしどういうわけか、これは私のOpenCAセットアップでは正しく機能しません。
viewCert
の方法を疑った CERTIFICATEと
CA_CERTIFICATEを区別し、有効、期限切れ、
一時停止、および取り消された証明書に対するさまざまなクエリの処理方法を区別します。
これがviewCert
の変更です ファイルlib/openca/perl_modules/perl5/OpenCA/AC.pm
のcmd
サブルーチンgetOwner
に移動します ここには次のものがあります:
sub getOwner {
次の行を見つけます: # load the certificate
以下の行を置き換えます
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"); }
あり:
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"); }>
問題は次の行にありました: if( not (@certs = $self->{db}->searchItems (.
それでおしまい!それが誰かに役立つことを願っています。