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

Programmatically verify certificate (for renewal) against chain and arbitrary timestamp using openssl in bash

我们使用 bash 脚本和 openssl 命令行工具来维护我们的内部 PKI 链,这是在编写自动更新程序脚本时首先想到的:

is_cert_valid () {
    # pem cert, pem cert chain, timestamp
    local signed="" signer="" at_time=""
    openssl verify -attime "$at_time" -CAfile "$signer" "$signed"
    return $?
}

但是,openssl verify 的退出代码并不反映给定证书的有效性,但是(据我了解)如果命令未能执行检查。

如何重写 is_cert_valid 以便它在 bash if 语句中可用?假设不使用 python 或 c 等其他编程语言是可能的。

此方法适用于验证部分链,解析部分非常简单。它也适用于 CA,只需为签名者和签名者传递相同的证书。

is_cert_valid () {
    local signer="" signed="" at_time_offset="" 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
}