证书工具(certutil):函数执行失败:SEC_ERROR_LEGACY_DATABASE:证书/密钥数据库采用旧的、不受支持的格式。

12

我使用iceweasel(火狐浏览器)下载了一个经过验证的(不是自签名的)S/MIME证书,并将其存储在cert8.db中。

接下来我使用以下命令:

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文件的电脑的访问权限,现在我只有将cert8.db副本复制到另一台电脑。因此我重复了certutil和pk12util命令,但是certutil失败了,错误信息如下:certutil && pk12util
certutil: function failed: SEC_ERROR_LEGACY_DATABASE: The certificate/key database is in an old, unsupported format.

我已经拼命尝试着在3台不同的计算机上进行操作,其中包括一个与我最初成功提取p12文件的桌面电脑相同内核和libnss3-tools版本的计算机。

$ 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

有什么想法吗?

谢谢


1
安装了Chromium和libnss3-tools之后,“sql:$ {HOME} / .pki / nssdb”还不存在。我必须先通过“certutil -N -d sql:$ {HOME} / .pki / nssdb”初始化数据库。 - fuma
4个回答

26

数据库的迁移从平面文件到Berkeley DB再到现在的SQLite 3.12。将目录名以sql为前缀,并用引号括起来以避免空格:

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

供参考,这里是Mozilla NSS路线图


2
这对我有用,-d . 给出了主题错误,但 -d sql:. 正常工作。 - Coderer

10
错误信息相当晦涩。我在使用certutil -L获取cert8.db文件中证书列表时遇到了类似的错误。
现在我知道为什么这个命令没有起作用。 -L不仅仅与文件夹中的cert8.db一起工作,还依赖于另外两个文件:key3.db和secmod.db。所以只有在包含上述三个文件的文件夹中,-L才能正常工作。这就是为什么-d参数需要一个文件夹路径而不是cert8.db文件。
我尝试通过将cert8.db从Firefox配置文件夹复制到临时目录来使用certutil。
当certuitl -A成功但-L失败,成功的-A命令在该临时文件夹中创建了另外两个文件时,我注意到了这一点。
还要检查目录路径是否有空格。带有空格会导致相同的错误或“旧数据库格式错误”等。特别是在Mac OS中,“Application Support”文件夹中包含名称中的空格。因此,它需要完全引用路径。
"/Users/myuser/Library/Application Support/Firefox/Profiles/jii912uh.default"

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

谢谢。现在我知道 modutil-dbdir 也应该是“secmod.db 所在的目录”,而不是以文件名结尾的路径。 - WesternGun

7

令人奇怪和混淆的是,如果您尝试查询一个证书数据库,而您没有访问权限并且没有使用sudo,则会出现此错误。


1
我需要恢复整个.mozilla目录以使certutil成功运行。文件cert8.db需要在原目录中。

查看其他答案以获取更合理的解释。 - stelios

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接