I've imported a developer identity (certificate + private key) for iOS development to a keychain using the "security" Terminal application with the command
security import identity.p12 -k <keychain> -P <passphrase>
This imports both items included in the p12 file, certificate and private key, into the given keychain. I forgot to specify -T /usr/bin/codesign
, however, which adds the codesign application to the access list of the private key. I've tried to add the codesign app to the access list to no avail:
security delete-certificate
and re-importing. This does not change the access list of the private key.Since I only have ssh access to the machine, using the Keychain GUI application won't work. Therefore I'm looking for a way to delete the private key from the keychain (so that I can re-import the identity afterwards). I've checked the man page of the security
tool but did not find a means to delete a private key.
Is there any way you can remove a private key from a keychain using Terminal commands only (as I do only have ssh access to the machine in question)?
There are several keychains on your system:
sudo security list-keychains
"/Users/JonDoe/Library/Keychains/login.keychain"
"/Library/Keychains/System.keychain"
I think you imported it into the System-Keychain: First make a backup of your System Root Certificates before making any changes (or any other keychain you choose):
cd /System/Library/Keychains/
sudo cp SystemRootCertificates.keychain SystemRootCertificates.keychain.old
List all keychains / all certificates in your keychain:
ls -l /System/Library/Keychains/
sudo security dump-keychain /System/Library/Keychains/SystemRootCertificates.keychain
With the second command each certificate of the keychain is shown. Identify the certificate you want to remove. Then remove the certificate with the following command:
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
That's all. Now you can import your certificate again. In case of an error, you can restore your keychain with the following command:
sudo security import certificate_files_backup -k /System/Library/Keychains/SystemRootCertificates.keychain -t cert