Mac OS X安全性删除证书-c <名称>?</name>的示例

时间:2013-04-15 15:29:07

标签: macos security certificate

简短版本:请提供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,因为它使人们更容易阅读)

2 个答案:

答案 0 :(得分:2)

这个答案,几乎是从堆栈苹果网站逐字逐句:

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

列出根证书:

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哈希方法可能更安全,并建议这样做。你有关覆盖证书的问题很复杂,因为根据证书,它通常不是一个命令来处理所有场景。 There's a post on the apple site with included screencasts使用(而不是使用)安全性和钥匙串的不同方式。

答案 1 :(得分:2)

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

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

证书的通用名称是用户名,但不是用户的“用户名”。

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

首先,我获取用户login.keychain的路径并删除周围的引号,然后将其传输到名为“$ Keychain_Name”的字符串变量中。

我的脚本然后通过指法当前登录的用户来检索证书的公用名,点击“Name:”字段并使用awk获取所需的信息(First Last)。它被传递到字符串“$ Common_Name”。

然后我使用security delete-certificate和两个字符串变量,并删除了证书!

以下脚本......

#!/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

希望这能给你一些思考的食物!