使用终端从Mac OS X钥匙串中删除私钥

Ben*_*min 26 macos terminal keychain codesign

我已经使用"安全"终端应用程序将用于iOS开发的开发者身份(证书+私钥)导入到钥匙串中

security import identity.p12 -k <keychain> -P <passphrase>
Run Code Online (Sandbox Code Playgroud)

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

  • 我尝试使用添加的参数重新导入标识,但这似乎不会更改私钥的访问列表.
  • 我还尝试使用security delete-certificate和重新导入从钥匙串中删除证书.这不会更改私钥的访问列表.

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

有没有办法可以使用终端命令从钥匙串中删除私钥(因为我只有ssh访问相关机器)?

Eri*_*rik 33

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

sudo security list-keychains
"/Users/JonDoe/Library/Keychains/login.keychain"
"/Library/Keychains/System.keychain"
Run Code Online (Sandbox Code Playgroud)

我认为您将其导入System-Keychain:首先在进行任何更改(或您选择的任何其他钥匙串)之前备份您的系统根证书:

cd /System/Library/Keychains/
sudo cp SystemRootCertificates.keychain SystemRootCertificates.keychain.old
Run Code Online (Sandbox Code Playgroud)

列出钥匙串中的所有钥匙串/所有证书:

ls -l /System/Library/Keychains/
sudo security dump-keychain /System/Library/Keychains/SystemRootCertificates.keychain
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

就这样.现在您可以再次导入证书.如果出现错误,您可以使用以下命令恢复钥匙串:

sudo security import certificate_files_backup -k /System/Library/Keychains/SystemRootCertificates.keychain -t cert
Run Code Online (Sandbox Code Playgroud)