web-dev-qa-db-fra.com

Supprimer la clé privée du trousseau Mac OS X à l'aide de Terminal

J'ai importé une identité de développeur (certificat + clé privée) pour le développement iOS dans un trousseau à l'aide de l'application "sécurité" Terminal avec la commande

security import identity.p12 -k <keychain> -P <passphrase>

Cela importe les deux éléments inclus dans le fichier p12, le certificat et la clé privée, dans le trousseau donné. Cependant, j'ai oublié de spécifier -T /usr/bin/codesign, ce qui ajoute l'application de code-code à la liste d'accès de la clé privée. J'ai essayé d'ajouter l'application codesign à la liste d'accès en vain:

  • J'ai essayé de réimporter l'identité avec le paramètre ajouté, mais cela ne semble pas modifier la liste d'accès de la clé privée.
  • J'ai également essayé de supprimer le certificat du trousseau en utilisant security delete-certificate et de le réimporter. Cela ne modifie pas la liste d'accès de la clé privée.

Comme je n’ai qu’un accès ssh à la machine, l’utilisation de l’application Keychain GUI ne fonctionnera pas. Par conséquent, je cherche un moyen de supprimer la clé privée du trousseau (pour pouvoir ensuite réimporter l'identité). J'ai consulté la page de manuel de l'outil security mais je n'ai pas trouvé le moyen de supprimer une clé privée.

Existe-t-il un moyen de supprimer une clé privée d'un trousseau à l'aide des commandes Terminal uniquement (dans la mesure où je n'ai qu'un accès ssh à la machine en question)?

25
Benjamin

Il existe plusieurs porte-clés sur votre système:

Sudo security list-keychains
"/Users/JonDoe/Library/Keychains/login.keychain"
"/Library/Keychains/System.keychain"

Je pense que vous l'avez importé dans le System-Keychain:

cd /System/Library/Keychains/
Sudo cp SystemRootCertificates.keychain SystemRootCertificates.keychain.old

Répertoriez tous les trousseaux/tous les certificats dans votre trousseau:

ls -l /System/Library/Keychains/
Sudo security dump-keychain /System/Library/Keychains/SystemRootCertificates.keychain

Avec la deuxième commande, chaque certificat du trousseau est affiché. Identifiez le certificat que vous souhaitez supprimer . Ensuite, supprimez le certificat à l'aide de la commande suivante:

Sudo security delete-certificate -Z <SHA-1 hash of certificate> /System/Library/Keychains/SystemRootCertificates.keychain
**alternative:**
Sudo security delete-certificate -c <common name of certificate> /System/Library/Keychains/SystemRootCertificates.keychain

C'est tout. Vous pouvez maintenant importer à nouveau votre certificat. En cas d'erreur, vous pouvez restaurer votre trousseau avec la commande suivante:

Sudo security import certificate_files_backup -k /System/Library/Keychains/SystemRootCertificates.keychain -t cert
33
Erik

Vous pouvez supprimer le certificat et la clé en exécutant une commande dans le terminal:

Sudo security delete-identity -Z "SHA-1"

ou

Sudo security delete-identity -c "CommonName"

Au début, je pensais que cela ne supprimait que la clé, mais en fait, il supprimait également le certificat (il vous suffit de fermer complètement le trousseau et de le rouvrir pour voir les modifications - si vous le vérifiez avec l'interface graphique). 

De man security:

     delete-identity [-h] [-c name] [-Z hash] [-t] [keychain...]
        Delete a certificate and its private key from a keychain.  If no keychain arguments are provided, the default search list is used.

        -c name         Specify certificate to delete by its common name
        -Z hash         Specify certificate to delete by its SHA-1 hash
        -t              Also delete user trust settings for this identity certificate

Vous devrez peut-être d'abord déverrouiller le trousseau (à partir de man security):

 unlock-keychain [-hu] [-p password] [keychain]
        Unlock keychain, or the default keychain if none is specified.
0
mayqueen