web-dev-qa-db-fra.com

certutil: fonction a échoué: SEC_ERROR_LEGACY_DATABASE: la base de données de certificats/clés est dans un ancien format non pris en charge.

J'avais téléchargé un certificat S/MIME vérifié (non auto-signé) avec iceweasel (firefox) qui était stocké dans cert8.db

Puis j'ai utilisé:

certutil -L -d <path_to_folder_that_cert8.db_resides>

afin d’énumérer les certificats, puis j’ai extrait le fichier .p12 en utilisant le nom de mon certificat que certutil m’a donné:

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

Le problème est que J'ai perdu l'accès au PC sur lequel la p12 était stockée et je n'ai maintenant que une copie cert8.db sur un autre PC. J'ai donc répété les commandes certutil && pk12util, mais certutil a échoué avec:

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

J'ai désespérément essayé sur 3 ordinateurs différents, dont un avec le même noyau et la version libnss3-tools (comme le bureau initial où j'ai extrait la p12 avec succès), à savoir:

$ 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 version: 2: 3.17.2-1

Des pensées?

Merci

5
chefarov

Le message d'erreur est assez cryptique. Une erreur similaire s'est produite lors de l'utilisation de certutil -L pour obtenir la liste des certificats dans un fichier cert8.db

Maintenant, je trouve pourquoi la commande n'a pas fonctionné.

Le –L ne peut fonctionner qu'avec un cert8.db dans un dossier. Il dépend également de deux autres fichiers, key3.db and secmod.db. Donc, dans un dossier où tous les 3 fichiers ci-dessus sont présents, -L ne fonctionne que là. Et c’est pourquoi le paramètre –d prend un chemin de dossier. Pas le fichier cert8.db

J'ai essayé certutil en copiant cert8.db à partir du dossier du profil Firefox dans un répertoire temporaire. 

Je l'ai remarqué lorsque certuitl -A a réussi mais -L a échoué et que la commande -A réussie a créé deux autres fichiers dans ce dossier temporaire. 

Vérifiez également si le chemin du répertoire contient de l'espace ou non. Avec de l'espace, cela donne la même erreur ou 'erreur de format de fichier incorrect - ancien format de base de données', etc. Spécialement sous Mac OS, le dossier est dans le dossier "Application Support" qui contient de l'espace dans le nom. Il faut donc que le chemin soit complètement cité:

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

ou ajoutez le caractère\escape. 

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

Au fil des ans, la base de données a migré des fichiers plats vers Berkeley DB vers SQLite dans la version 3.12. Préfixez le nom du répertoire avec sql et placez-le entre guillemets pour contourner les espaces: 

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

Pour référence, voici la feuille de route Mozilla NSS .

11
rjt

Curieusement et déroutant, cette erreur est également ce que vous obtenez si vous essayez d'interroger une base de données de certificats dans un emplacement auquel vous n'avez pas accès et que vous n'avez pas utilisé Sudo.

4
James

J'avais besoin de restaurer le répertoire entier .mozilla pour pouvoir exécuter le certutil avec succès. Le fichier cert8.db doit être dans le répertoire d'origine.

1
chefarov