我下载了一个经过验证的(不是自签名的)S/MIME证书,其中包含存储在cert8中的iceweasel(火狐.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 的 PC,现在我只有一个 cert8.db 复制到另一台 PC。因此,我重复了certutil && 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
有什么想法吗?
谢谢
多年来,该数据库已经从平面文件迁移到Berkeley DB,再到现在的3.12中的SQLite。 在目录名称前面加上 sql
并用引号括起来以绕过空格:
certutil -L -d sql:${HOME}/.pki/nssdb
作为参考,这里是Mozilla NSS路线图。
错误消息非常神秘。使用 certutil -L
获取 cert8.db
文件中的证书列表时,我遇到了类似的错误。
现在我找到了为什么该命令不起作用。
–L
不能只处理文件夹中的cert8.db
。它还依赖于另外两个文件,key3.db and secmod.db
.因此,在存在上述所有 3 个文件的文件夹中,-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
奇怪且令人困惑的是,如果您尝试在无法访问的位置查询证书数据库并且未使用sudo
,也会出现此错误。
我需要恢复整个.mozilla目录才能成功运行certutil。文件 cert8.db 需要位于原始目录中。