是否可以在bash阵列中循环浏览OSX钥匙串证书?

时间:2019-06-02 04:12:13

标签: arrays bash macos certificate keychain

在我们的环境中,OSX登录钥匙串包含多个具有相同名称(最终用户帐户名称)的证书。我想遍历这些证书并捕获到期日期。

我使用安全性命令(包括用于查找所有实例的-a参数)在bash中创建了一个数组以查找证书,并将其通过管道传递给openssl命令以查找到期日期。但是该数组仅返回第一个证书的到期日期,而没有其他返回。

array=( `/usr/bin/security find-certificate -a -c $user -p -Z       /Users/$user/Library/Keychains/login.keychain | /usr/bin/openssl x509 -noout -enddate | cut -f2 -d= | tr ' ' '-'` );

for i in ${array[@]}
do 
echo "$user has an expiration date of $i."
done

1 个答案:

答案 0 :(得分:0)

尝试一下:

/usr/bin/security find-certificate -a -c $user -p > /tmp/certs.pem
while read line; do
    if [[ "$line" == *"--BEGIN"* ]]; then
        cert=$line
    else
        cert="$cert"$'\n'"$line"
        if [[ "$line" == *"--END"* ]]; then
            echo "$cert" > /tmp/checkcert.pem
            rawExp=$(openssl x509 -noout -enddate -in /tmp/checkcert.pem | cut -d= -f 2)
            echo "$user has an expiration date of $rawExp."
        fi
    fi
done < /tmp/certs.pem