5

简短版:请提供一个例子security delete-certificate -c <name>......(我试过了security delete-certificate -c "Foo Certification Authority",我试过通配符。)

长版:

我正在尝试做的事情:替换或覆盖现有证书。

有人可以提供一个使用security获取证书“名称”然后使用security delete-certificate -c <name>删除它的示例吗?我已经尝试了一些东西,<name>但还没有能够给它提供与我要删除的证书相匹配的东西。

或者,如果我使用security add-trusted-cert -d -r trustRoot -k <keychain> <certificate>它会简单地覆盖任何现有的同名证书吗?如果是这种情况,那么我想我不需要知道如何按名称删除旧的。

(我更喜欢处理名称而不是 SHA,因为它使事情更易于阅读)

4

2 回答 2

5

这个答案几乎是来自堆栈苹果网站的逐字记录:

*在尝试任何事情之前备份钥匙串。

列出根证书:

sudo security dump-keychain /System/Library/Keychains/SystemRootCertificates.keychain

在转储中查找要删除的证书的名称或 SHA-1 哈希值:

Usage: delete-certificate [-c name] [-Z hash] [-t] [keychain...]

-c  Specify certificate to delete by its common name
-Z  Specify certificate to delete by its SHA-1 hash value
-t  Also delete user trust settings for this certificate The certificate to be deleted 

must be uniquely specified either by a string found in its common name, or by its SHA-1 hash. If no keychains are specified to search, the default search list is used.

例如,您可以使用以下命令删除此中文根证书:

sudo security delete-certificate -Z 8BAF4C9B1DF02A92F7DA128EB91BACF498604B6F /System/Library/Keychains/SystemRootCertificates.keychain

我认为 -Z 哈希方法可能更安全,并且建议这样做。您关于覆盖证书的问题很复杂,因为根据证书的不同,通常不是一个命令可以处理所有情况。苹果网站上有一个帖子,其中包含使用(和不使用)安全性和钥匙串的不同方式的截屏视频。

于 2013-04-15T15:48:23.207 回答
2

这是我用来根据证书的公用名清除旧用户证书的方法。

在我的特殊情况下,我的 Mac 用户绑定到 Active Directory,并且他们安装了“用户证书”。

证书的公用名是用户名,而不是用户的“用户名”。

在我的环境中,用户名是 first.last。

因此,首先,我获取用户 login.keychain 的路径并去掉周围的引号,然后将其通过管道传输到一个名为“$Keychain_Name”的字符串变量中。

然后,我的脚本通过查找当前登录的用户、搜索“名称:”字段并使用 awk 获取所需的信息(First Last)来检索证书的通用名称。这将通过管道传输到字符串“$Common_Name”中。

然后我使用带有两个字符串变量的安全删除证书,瞧,证书被删除了!

下面的脚本...

#!/bin/sh

# CLEAR SCREEN
clear

echo "######################################################################"
echo "# Certificate Removal Script"
echo "# Written by Caine Hörr"
echo "# Written on Wednesday, July 17, 2013"
echo "# Last updated by Caine Hörr"
echo "# Last updated on Wednesday, July 17, 2013"
echo "######################################################################"
echo

echo
echo "Gathering Keychain Info"
Keychain_Name=$(security list-keychains | grep $(echo $USER) | tr -d '"')

echo
echo "Gathering Certificate Common Name Info"
Common_Name=$(finger $(echo $USER) | grep "Name:" | awk '{ print $4, $5 }')

echo
echo "Deleting Certificate $Common_Name from $Keychain_Name"
security delete-certificate -c "$Common_Name" $Keychain_Name

echo
echo "Process Complete"
exit

希望这能给你一些思考!

于 2013-07-17T20:40:38.670 回答