30

我已经使用带有命令的“安全”终端应用程序将 iOS 开发的开发人员身份(证书 + 私钥)导入到钥匙串

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

这会将 p12 文件中包含的两个项目(证书和私钥)导入给定的钥匙串。但是,我忘了指定-T /usr/bin/codesign,它将协同设计应用程序添加到私钥的访问列表中。我试图将 codesign 应用程序添加到访问列表中无济于事:

  • 我尝试使用添加的参数重新导入身份,但这似乎并没有改变私钥的访问列表。
  • 我还尝试使用security delete-certificate并重新导入从钥匙串中删除证书。这不会更改私钥的访问列表。

由于我只能通过 ssh 访问机器,因此无法使用 Keychain GUI 应用程序。因此,我正在寻找一种从钥匙串中删除私钥的方法(以便之后我可以重新导入身份)。我检查了该security工具的手册页,但没有找到删除私钥的方法。

有什么方法可以仅使用终端命令从钥匙串中删除私钥(因为我只有 ssh 访问有问题的机器)?

4

2 回答 2

37

您的系统上有几个钥匙串:

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

使用第二个命令显示钥匙串的每个证书。确定要删除的证书。然后使用以下命令删除证书:

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
于 2011-10-12T15:42:47.240 回答
2

您可以通过在终端中运行命令来删除证书和密钥:

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.
于 2018-10-17T13:21:07.570 回答