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 должен находиться в исходном каталоге.