在bash中使用openssl对链和任意时间戳以编程方式验证证书(用于续订)

时间:2018-11-14 00:43:17

标签: bash openssl pki

我们使用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),就可以实现上述目的。

1 个答案:

答案 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
}