コマンドで「セキュリティ」ターミナルアプリケーションを使用して、iOS開発用の開発者ID(証明書+秘密キー)をキーチェーンにインポートしました
security import identity.p12 -k <keychain> -P <passphrase>
これにより、p12ファイルに含まれている両方のアイテム、証明書と秘密鍵が、指定されたキーチェーンにインポートされます。 -T /usr/bin/codesign
を指定するのを忘れていましたが、秘密鍵のアクセスリストにcodesignアプリケーションが追加されています。コードサインアプリをアクセスリストに追加して、役に立たないようにしました:
security delete-certificate
を使用してキーチェーンから証明書を削除し、再インポートしてみました。これにより、秘密鍵のアクセスリストは変更されません。私はマシンへのsshアクセスしか持っていないので、キーチェーンGUIアプリケーションを使用しても機能しません。したがって、私はキーチェーンから秘密キーを削除する方法を探しています(後でIDを再インポートできるようにするため)。 security
ツールのmanページを確認しましたが、秘密鍵を削除する手段が見つかりませんでした。
ターミナルコマンドのみを使用してキーチェーンから秘密キーを削除する方法はありますか(問題のマシンへのsshアクセスしか持っていないため)?
システムにはいくつかのキーチェーンがあります:
Sudo security list-keychains
"/Users/JonDoe/Library/Keychains/login.keychain"
"/Library/Keychains/System.keychain"
私はそれをシステムキーチェーンにインポートしたと思います:変更(または選択した他のキーチェーン)を行う前に、まずシステムルート証明書のバックアップを作成します。
cd /System/Library/Keychains/
Sudo cp SystemRootCertificates.keychain SystemRootCertificates.keychain.old
キーチェーン内のすべてのキーチェーン/すべての証明書をリストします。
ls -l /System/Library/Keychains/
Sudo security dump-keychain /System/Library/Keychains/SystemRootCertificates.keychain
2番目のコマンドでは、キーチェーンの各証明書が表示されます。削除する証明書を特定します。次に、次のコマンドで証明書を削除します。
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
それで全部です。これで、証明書を再度インポートできます。エラーが発生した場合は、次のコマンドでキーチェーンを復元できます。
Sudo security import certificate_files_backup -k /System/Library/Keychains/SystemRootCertificates.keychain -t cert
ターミナルでコマンドを実行して、証明書とキーを削除できます。
Sudo security delete-identity -Z "SHA-1"
または
Sudo security delete-identity -c "CommonName"
最初はキーだけが削除されると思いましたが、実際には証明書も削除されます(変更を確認するには、キーチェーンを完全に閉じて再度開くだけです-GUIで確認している場合)。
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
最初にキーチェーンのロックを解除する必要がある場合があります(man security
から):
unlock-keychain [-hu] [-p password] [keychain]
Unlock keychain, or the default keychain if none is specified.