Certificate certutil:函数失败:SEC_错误\u旧版\u数据库:证书/密钥数据库采用旧的、不受支持的格式

Certificate certutil:函数失败:SEC_错误\u旧版\u数据库:证书/密钥数据库采用旧的、不受支持的格式,certificate,smime,nss,certificate-store,certutil,Certificate,Smime,Nss,Certificate Store,Certutil,我用iceweasel(firefox)下载了一个已验证(非自签名)的S/MIME证书,该证书存储在cert8.db中 然后我用了: certutil -L -d <path_to_folder_that_cert8.db_resides> 我曾在3台不同的计算机上拼命尝试,包括一台具有相同内核和libnss3工具version的计算机(如我成功提取p12的初始桌面),这是: $ uname -a Linux commander 3.16.0-4-amd64 #1 SMP Deb

我用iceweasel(firefox)下载了一个已验证(非自签名)的S/MIME证书,该证书存储在cert8.db中

然后我用了:

certutil -L -d <path_to_folder_that_cert8.db_resides>
我曾在3台不同的计算机上拼命尝试,包括一台具有相同内核和
libnss3工具
version的计算机(如我成功提取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工具
version:2:3.17.2-1

有什么想法吗


谢谢

为了成功运行certutil,我需要恢复整个.mozilla目录。文件cert8.db需要位于原始目录中。

错误消息非常神秘。在使用
certutil-L
获取
cert8.db
文件中的证书列表时,我遇到了类似的错误

现在我明白为什么命令不起作用了

–L
只能与文件夹中的
cert8.db
一起使用。它还依赖于另外两个文件,
key3.db和secmod.db
。 因此,在存在上述3个文件的文件夹中,
-L
仅在那里起作用。 这就是为什么
–d
参数采用文件夹路径的原因。不是
cert8.db
文件

我尝试了certutil,将Firefox配置文件文件夹中的
cert8.db
复制到临时目录中

当certuitl-A成功但-L失败,并且成功的-A命令在临时文件夹中创建了另外两个文件时,我注意到了这一点

还要检查目录路径是否有任何空间。使用空格时,会出现相同的错误或“错误文件格式错误-旧数据库格式”等。特别是在Mac OS中,该文件夹位于
“应用程序支持”
文件夹中,该文件夹的名称中包含空格。因此,它需要完全引用路径:

"/Users/myuser/Library/Application Support/Firefox/Profiles/jii912uh.default"
或添加\转义字符

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

多年来,该数据库已从平面文件迁移到Berkeley DB,并在3.12中迁移到现在的SQLite。在目录名前面加上
sql
,并用引号括起来以避开空格:

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

作为参考,这里有一个。

奇怪且令人困惑的是,如果您试图在一个您无权访问的位置查询证书数据库,并且您没有使用
sudo

请查看其余答案,以获得更合理的解释。谢谢。现在我知道
-dbdir
for
modutil
也应该是“secmod.db所在的目录”,而不是以文件名结尾的路径。这为我做到了,
-d。
给出了主题错误,但
-d sql:。
工作正常。安装chromium和libnss3工具后,'sql:${HOME}/.pki/nssdb'尚不存在。我必须首先通过'certutil-N-dsql:${HOME}/.pki/nssdb'初始化数据库。
 /Users/myuser/Library/Application\ Support/Firefox/Profiles/jii912uh.default
certutil -L -d sql:${HOME}/.pki/nssdb