certutil: функция завершилась неудачей: SEC_ERROR_LEGACY_DATABASE: база данных сертификатов / ключей находится в старом неподдерживаемом формате

Я скачал проверенный (не самоподписанный) S/MIME-сертификат с iceweasel (firefox), который был сохранен в cert8.db

Тогда я использовал:

certutil -L -d <path_to_folder_that_cert8.db_resides>

для того, чтобы перечислить сертификаты, а затем я извлек файл.p12, используя имя моего сертификата, который дал мне certutil:

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

Проблема в том, что я потерял доступ к ПК, на котором хранился p12, и теперь у меня есть только копия cert8.db на другом ПК. Таким образом я повторил 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

Какие-нибудь мысли?

Спасибо

4 ответа

Решение

Сообщение об ошибке довольно загадочно. Я получил похожую ошибку при использовании certutil -L чтобы получить список сертификатов в cert8.db файл.

Теперь я понимаю, почему команда не работает.

–L не может работать только с cert8.db в папке. Это также зависит от двух других файлов, key3.db and secmod.db, Таким образом, в папке, где присутствуют все вышеуказанные 3 файла, -L работает только там. И вот почему –d Параметр принимает путь к папке. Не cert8.db файл.

Я попробовал certutil, скопировав cert8.db из папки профиля Firefox во временный каталог.

Я заметил это, когда certuitl -A успешно, но -L не удалось, и успешная команда -A создала два других файла в этой временной папке.

Проверьте также, есть ли в каталоге путь или нет. С пробелом выдает ту же ошибку или "ошибка неверного формата файла - старый формат базы данных" и т. Д. Особенно в Mac OS, папка находится в "Application Support" папка, которая содержит место в имени. Так что для этого нужен путь, полностью процитированный:

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

или добавьте символ \ escape.

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

За эти годы база данных была перенесена из плоских файлов в Беркли БД и теперь стала SQLite в 3.12. Префикс имени каталога sql и заключите в кавычки, чтобы обойти пробелы:

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

Для справки вот дорожная карта Mozilla NSS.

Как ни странно и странно, эта ошибка также возникает, если вы пытаетесь запросить базу данных сертификатов в месте, к которому у вас нет доступа и который вы не использовали sudo,

Мне нужно было восстановить весь каталог.mozilla, чтобы успешно запустить certutil. Файл cert8.db должен находиться в исходном каталоге.

Другие вопросы по тегам