web-dev-qa-db-ja.com

ターミナルを使用してMac OS Xキーチェーンから秘密鍵を削除する

コマンドで「セキュリティ」ターミナルアプリケーションを使用して、iOS開発用の開発者ID(証明書+秘密キー)をキーチェーンにインポートしました

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

これにより、p12ファイルに含まれている両方のアイテム、証明書と秘密鍵が、指定されたキーチェーンにインポートされます。 -T /usr/bin/codesignを指定するのを忘れていましたが、秘密鍵のアクセスリストにcodesignアプリケーションが追加されています。コードサインアプリをアクセスリストに追加して、役に立たないようにしました:

  • 追加されたパラメーターを使用してIDを再インポートしようとしましたが、秘密鍵のアクセスリストは変更されないようです。
  • また、security delete-certificateを使用してキーチェーンから証明書を削除し、再インポートしてみました。これにより、秘密鍵のアクセスリストは変更されません。

私はマシンへのsshアクセスしか持っていないので、キーチェーンGUIアプリケーションを使用しても機能しません。したがって、私はキーチェーンから秘密キーを削除する方法を探しています(後でIDを再インポートできるようにするため)。 securityツールのmanページを確認しましたが、秘密鍵を削除する手段が見つかりませんでした。

ターミナルコマンドのみを使用してキーチェーンから秘密キーを削除する方法はありますか(問題のマシンへのsshアクセスしか持っていないため)?

26
Benjamin

システムにはいくつかのキーチェーンがあります:

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
33
Erik

ターミナルでコマンドを実行して、証明書とキーを削除できます。

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.
0
mayqueen