certutil:函数失败:SEC_ERROR_LEGACY_DATABASE:证书/密钥数据库采用旧的、不受支持的格式

Posted

技术标签:

【中文标题】certutil:函数失败:SEC_ERROR_LEGACY_DATABASE:证书/密钥数据库采用旧的、不受支持的格式【英文标题】:certutil: function failed: SEC_ERROR_LEGACY_DATABASE: The certificate/key database is in an old, unsupported format 【发布时间】:2015-02-24 07:40:45 【问题描述】:

我下载了一个经过验证(非自签名)的 S/MIME 证书,其中包含存储在 cert8.db 中的 iceweasel (firefox)

然后我用了:

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 的访问权限,现在我只有 cert8.db 副本到另一台 PC。因此我重复了certutil &amp;&amp; pk12util 命令,但 certutil 失败了:

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

我已经在 3 台不同的计算机上拼命尝试过,其中一台具有相同的内核和 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

有什么想法吗?

谢谢

【问题讨论】:

安装 chromium 和 libnss3-tools 后,'sql:$HOME/.pki/nssdb' 还不存在。我必须先通过 'certutil -N -d sql:$HOME/.pki/nssdb' 初始化数据库。 【参考方案1】:

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

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

作为参考,这里是Mozilla NSS roadmap。

【讨论】:

这是为我做的,-d . 给出了主题错误,但-d sql:. 工作正常。【参考方案2】:

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

现在我找到了命令不起作用的原因。

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

我通过将 Firefox 配置文件文件夹中的 cert8.db 复制到临时目录来尝试使用 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 所在的目录”,而不是一个以文件名结尾的路径。【参考方案3】:

奇怪且令人困惑的是,如果您尝试在您无权访问且未使用 sudo 的位置查询证书数据库,也会出现此错误。

【讨论】:

【参考方案4】:

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

【讨论】:

查看其余答案以获得更合理的解释

以上是关于certutil:函数失败:SEC_ERROR_LEGACY_DATABASE:证书/密钥数据库采用旧的、不受支持的格式的主要内容,如果未能解决你的问题,请参考以下文章

使用CertUtil.exe下载远程文件

利用certutil.exe 传文件

利用Windows自带的Certutil查看文件MD5

certutil 检测iso镜像文件完整性

在“ExtendedProperties”之类的修饰符中添加的 certutil 语法是啥

web渗透Windows自带的Certutil的使用