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つです。 -
@certsListCA_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 (.
それでおしまい!それが誰かに役立つことを願っています。