我使用带有命令的“安全”终端应用程序将用于iOS开发的开发者身份(证书+私钥)导入到钥匙串
security import identity.p12 -k <keychain> -P <passphrase>
将p12文件,证书和私钥中包含的两个项目导入给定的钥匙串。但是,我忘了指定-T /usr/bin/codesign
,它将codesign应用程序添加到私钥的访问列表中。我试图将codesign app添加到访问列表中无济于事:
security delete-certificate
从钥匙串中删除证书并重新导入。这不会更改私钥的访问列表。由于我只有ssh访问机器,因此使用Keychain GUI应用程序将无法正常工作。因此,我正在寻找一种从钥匙串中删除私钥的方法(以便我之后可以重新导入身份)。我已经检查了security
工具的手册页,但没有找到删除私钥的方法。
有没有办法可以只使用终端命令从钥匙串中删除私钥(因为我只对相关机器进行ssh访问)?
答案 0 :(得分:33)
您的系统上有几个钥匙串:
sudo security list-keychains
"/Users/JonDoe/Library/Keychains/login.keychain"
"/Library/Keychains/System.keychain"
我认为您将其导入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
答案 1 :(得分:0)
您可以通过在终端中运行命令来删除证书和密钥:
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.