Macos 使用终端从Mac OS X密钥链中删除私钥

Macos 使用终端从Mac OS X密钥链中删除私钥,macos,terminal,keychain,codesign,Macos,Terminal,Keychain,Codesign,我已经使用带有命令的“安全”终端应用程序将iOS开发的开发者身份(证书+私钥)导入到密钥链中 security import identity.p12 -k <keychain> -P <passphrase> security import identity.p12-k-P 这会将p12文件中包含的两个项目证书和私钥导入到给定的密钥链中。但是,我忘记指定-T/usr/bin/codesign,这会将codesign应用程序添加到私钥的访问列表中。我尝试将codesi

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

security import identity.p12 -k <keychain> -P <passphrase>
security import identity.p12-k-P
这会将p12文件中包含的两个项目证书和私钥导入到给定的密钥链中。但是,我忘记指定
-T/usr/bin/codesign
,这会将codesign应用程序添加到私钥的访问列表中。我尝试将codesign应用程序添加到访问列表中,但没有成功:

  • 我尝试使用添加的参数重新导入标识,但这似乎不会更改私钥的访问列表
  • 我还尝试使用
    security delete certificate
    从密钥链中删除证书,然后重新导入。这不会更改私钥的访问列表
因为我只有ssh访问机器的权限,所以使用Keychain GUI应用程序将无法工作。因此,我正在寻找一种从密钥链中删除私钥的方法(以便以后可以重新导入标识)。我检查了
安全性
工具的手册页,但没有找到删除私钥的方法


您是否可以仅使用终端命令从密钥链中删除私钥(因为我只有ssh访问相关机器的权限)?

您的系统上有几个密钥链:

sudo security list-keychains
"/Users/JonDoe/Library/Keychains/login.keychain"
"/Library/Keychains/System.keychain"
我认为您已将其导入系统钥匙链: 在进行任何更改(或您选择的任何其他密钥链)之前,首先备份系统根证书:

列出密钥链中的所有密钥链/所有证书:

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

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

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

一开始我以为它只会删除密钥,但实际上它也会删除证书(您只需完全关闭密钥链并再次打开它即可查看更改—如果您使用GUI验证的话)

人身安全

     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
 unlock-keychain [-hu] [-p password] [keychain]
        Unlock keychain, or the default keychain if none is specified.
您可能需要先解锁钥匙链(从
man security
):


谢谢你非常详细的回答!我没有将身份导入到系统密钥链中,而是导入到登录密钥链中——正如我所希望的那样。我唯一没有正确执行的操作是在导入期间指定
-T/usr/bin/codesign
标志。我已经尝试了deleteCertificate子命令,但它只删除证书,而不删除私钥。因此,
-T
标志在重新导入时被忽略,因为私钥仍然包含在密钥链中。这说明了情况吗?在尝试了一点之后,我认为最好的解决方案是从密钥链导出所有密钥和证书,将其删除并重新导入。实际上,我找不到删除私钥的shell命令。您是否尝试过为“删除证书”选项指定密钥的SHA-1哈希值?我尝试过删除私钥所属的证书。这是可行的,但一旦再次导入代码签名标识,旧的访问权限将授予私钥。我可以通过-c(证书的通用名称)删除证书,但不能删除私钥,我不知道如何将其定位。你是怎么做到的?我怎样才能得到一个cer的SHA-1散列或通用名(我有p12文件)?
     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
 unlock-keychain [-hu] [-p password] [keychain]
        Unlock keychain, or the default keychain if none is specified.