You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中将私钥插入证书链的第一个证书末尾?

解决方案:将私钥插入证书链的第一个证书之后

问题分析

你需要把私钥文件的内容插入到证书链文件中第一个-----END CERTIFICATE-----行的后面,而非所有证书结束行之后。之前的脚本存在两个关键错误:

  1. sed的r命令需要传入文件路径,但你把文件内容赋值给了private_key变量,导致sed无法识别目标文件
  2. -e "/-----END CERTIFICATE-----/d"会删除所有匹配的证书结束行,不符合仅插入第一个位置的需求

正确实现方式

方法1:用awk(逻辑清晰,推荐)

通过标记位控制,只在第一个证书结束行后插入私钥:

awk '
    # 匹配第一个证书结束行
    /-----END CERTIFICATE-----/ && !inserted {
        print $0                  # 输出当前行
        system("cat '"$PRIVATE_KEY_PATH"'")  # 插入私钥文件内容
        inserted=1                # 标记已完成插入,避免重复操作
        next
    }
    # 其他所有行正常输出
    1
' "$certificate_path" > updated_combined.pem

方法2:用sed(高效单行命令)

利用0,/pattern/限定匹配范围,仅处理第一个证书结束行:

sed -e '0,/-----END CERTIFICATE-----/{//r '"$PRIVATE_KEY_PATH"'}' "$certificate_path" > updated_combined.pem
  • 0,/-----END CERTIFICATE-----/:限定处理从文件开头到第一个匹配行的范围
  • //r "$PRIVATE_KEY_PATH":在匹配到的证书结束行后,读取并插入私钥文件内容

整合到你的脚本中

替换原函数里的合并逻辑即可:

get_new_certificate() {
    curl --get "$venafi_url$venafi_get_cert_endpoint?Format=Base64&IncludeChain=true&RootFirstOrder=false" --insecure --data-urlencode "CertificateDN=$certificate_identifier" \
    -H "accept: application/json" \
    -H "Authorization: Bearer $auth_token" \
    -o "$certificate_path"

    # 使用awk完成私钥插入
    awk '
        /-----END CERTIFICATE-----/ && !inserted {
            print $0
            system("cat '"$PRIVATE_KEY_PATH"'")
            inserted=1
            next
        }
        1
    ' "$certificate_path" > updated_combined.pem

    # 若需要直接覆盖原证书文件,可替换为:
    # awk '...' "$certificate_path" > temp.pem && mv temp.pem "$certificate_path"

    echo "Got new Certificate"
}

验证结果

执行后updated_combined.pem的结构将完全符合你的预期:

-----BEGIN CERTIFICATE-----
... (服务器证书内容)...
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: DES-EDE3-CBC,CFCECC7976725DE5
    <服务器私钥 - 带密码保护>
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
... (中间证书内容)...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
... (CA根证书内容)...
-----END CERTIFICATE----

内容的提问来源于stack exchange,提问作者Paul1896

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 01:05:04