当前位置: 首页 > 知识库问答 >
问题:

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

贺宝
2023-03-14

我们使用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\u valid,使其在bash if语句中可用?假设不使用其他编程语言(如python或c)就可以实现这一点。

共有1个答案

邵阳
2023-03-14

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

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
}
 类似资料:
  • 我正在用以下组件构建自己的证书链: 根证书是自签名证书,中间证书由根证书和用户由中间证书签名。 现在我想验证一个用户证书是否有其根证书的锚。 具有 验证是可以的。在下一步中,我将使用 验证结果显示 什么是错的?

  • 致以最诚挚的问候

  • 我在本地机器上开发了一个webapp,并使用mailtrap.io电子邮件测试服务来检查传出的电子邮件。我没有更改任何内容,但几天前mailtrap服务返回了以下错误消息: Mailtrap建议如下: 关于SSL错误,当试图发送电子邮件到Mailtrap时,您并不孤单。请更新您的OpenSSL版本,您可能会听到关于Letsencrypt证书的全局问题:它的旧根证书已于9月30日过期。它主要影响使用

  • inter证书有什么用? 我有这个证书链: root-VeriSign Class 3 Public Primary Certification Authority-g5.cer Inter-Symantec Class 3 EV SSL CA-G3.CER website.pfx

  • 问题内容: 我的应用程序采用这样的字符串:“ 2002-10-15 10:55:01.000000”。我需要验证该字符串对于db2时间戳有效。 我怎样才能做到这一点? 编辑:这主要工作 问题是,如果我以毫秒为单位传递了格式错误的格式(例如“ 2011-05-02 10:10:01.0av”),则会通过验证。我假设由于第一个毫秒字符是有效的,所以它只会截断字符串的其余部分。 问题答案: 我不确定格式

  • 问题内容: 我正在使用模块来验证证书,但是我的证书和公共密钥都是 DER 格式。似乎该模块不接受此格式。 有没有一种方法(或模块)使用NodeJS将DER转换为PEM格式?我找不到任何内容,也无法使用命令行通过shell 调用 openssl 。 更新: 这与HTTPS证书无关。它是关于常规X.509证书的。如果您将问题标记为否定,请发表评论以证明其合理性。如果您无能为力,那就不要傻了。 问题答案