我们使用bash脚本和openssl命令行工具来维护我们的内部PKI链,这是编写自动更新过程脚本时想到的第一件事:
is_cert_valid () {
# pem cert, pem cert chain, timestamp
local signed="$1" signer="$2" at_time="$3"
openssl verify -attime "$at_time" -CAfile "$signer" "$signed"
return $?
}
但是,openssl verify
的退出代码不能反映给定证书的有效性,但是(据我所知)可以反映命令是否未能执行检查。
如何改写is_cert_valid
,使其在bash if语句中可用?假设无需使用其他编程语言(例如python或c),就可以实现上述目的。
答案 0 :(得分:0)
此方法适用于验证部分链,并且解析部分相当简单。它也适用于CA,只需为签名者和签名者传递相同的证书即可。
is_cert_valid () {
local signer="$1" signed="$2" at_time_offset="$3" output
if output="$(openssl verify \
-CApath /dev/null \
-attime "$(( "$at_time_offset" + "$(date +%s)" ))" \
-partial_chain \
-trusted "$signer" \
"$signed" \
)" &&
[[ "$output" == "$signed: OK" ]]; then
return 0
fi
return 1
}