web-dev-qa-db-ja.com

certutil:関数が失敗しました:SEC_ERROR_LEGACY_DATABASE:証明書/キーデータベースが古い、サポートされていない形式です

Cert8.dbに保存されている、iceweasel(firefox)を使用して検証済み(自己署名ではない)S/MIME証明書をダウンロードしました

それから私は使用しました:

certutil -L -d <path_to_folder_that_cert8.db_resides>

証明書を一覧表示するために、certutilから提供された証明書の名前を使用して.p12ファイルを抽出しました。

pk12util -o mycertfile.p12 -n "<name_found_from_certutil>" -d <path_to_folder_that_cert8.db_resides>

問題は、p12が保存されていたPCに対してアクセスを失ったであり、現在は別のPCに対してa cert8.dbコピーしかないことです。したがって、私はcertutil && pk12utilコマンドですが、certutilは次のエラーで失敗します:

certutil: function failed: SEC_ERROR_LEGACY_DATABASE: The certificate/key database is in an old, unsupported format.

私は、同一のカーネルとlibnss3-toolsバージョン(私がp12を正常に抽出した最初のデスクトップのような):

$ uname -a 
Linux commander 3.16.0-4-AMD64 #1 SMP Debian 3.16.7-2 (2014-11-06) x86_64 GNU/Linux 

libnss3-toolsバージョン:2:3.17.2-1

何かご意見は?

ありがとう

7
stelios

エラーメッセージは非常に不可解です。 certutil -Lを使用してcert8.dbファイル内の証明書のリストを取得しているときに、同様のエラーが発生しました。

ここで、コマンドが機能しなかった理由を見つけます。

–Lは、フォルダー内のcert8.dbでのみ機能しません。また、他の2つのファイルkey3.db and secmod.dbにも依存しています。したがって、上記の3つのファイルがすべて存在するフォルダでは、-Lはそこでのみ機能します。そして、それが–dパラメータがフォルダパスを取る理由です。 cert8.dbファイルではありません。

Firefoxのプロファイルフォルダから一時ディレクトリにcert8.dbをコピーしてcertutilを試しました。

Certuitl -Aは成功したが、-Lが失敗し、成功した-Aコマンドがその一時フォルダーに他の2つのファイルを作成したときに、私はそれに気付きました。

ディレクトリパスにスペースがあるかどうかも確認してください。スペースがあると、同じエラーまたは「不良ファイル形式エラー-古いデータベース形式」などが発生します。特にMac OSでは、フォルダーは"Application Support"フォルダーにあり、名前にスペースが含まれています。したがって、完全に引用されたパスが必要です。

"/Users/myuser/Library/Application Support/Firefox/Profiles/jii912uh.default"

または\エスケープ文字を追加します。

 /Users/myuser/Library/Application\ Support/Firefox/Profiles/jii912uh.default
8
karim

データベースは長年にわたってフラットファイルからバークレーDBに移行し、3.12ではSQLiteに移行しました。ディレクトリ名の前にsqlを付け、引用符で囲んでスペースを囲みます。

certutil -L -d sql:${HOME}/.pki/nssdb 

参考までに、ここに Mozilla NSSロードマップ を示します。

15
rjt

奇妙で紛らわしいことに、このエラーは、アクセスできない場所で証明書データベースを照会しようとしていて、Sudoを使用しなかった場合にも発生します。

4
James

Certutilを正常に実行するには、.mozillaディレクトリ全体を復元する必要がありました。 cert8.dbファイルは、元のディレクトリにある必要があります。

1
stelios