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

如何通过OpenSSL命令或Ansible模块从fullchain提取根证书与中间证书

从fullchain证书文件中提取根证书与中间证书

你可以通过OpenShell命令或Ansible模块实现需求,以下是具体方案:

使用OpenSSL命令实现

方法1:基于证书块顺序提取(适用于固定顺序的fullchain)

如果你的fullchain.crt始终遵循「服务器证书→中间证书→根证书」的顺序,直接用文本处理工具跳过第一个证书块即可:

使用sed命令

sed -n '/-----BEGIN CERTIFICATE-----/{:a;N;/-----END CERTIFICATE-----/!ba;2,$p}' fullchain.crt > intermediate_root.crt

说明:该命令会匹配每个完整的证书块,从第2个证书块开始打印,自动跳过第一个服务器证书。

使用awk命令

awk '/-----BEGIN CERTIFICATE-----/{i++} i>=2' fullchain.crt > intermediate_root.crt

说明:通过计数证书块的起始标记,仅打印第2个及之后的证书内容。

方法2:基于证书属性识别(适用于任意顺序的fullchain)

如果证书块顺序不固定,可以通过OpenSSL检查证书是否为CA证书(根/中间证书通常包含CA:TRUE属性):

#!/bin/bash
input="fullchain.crt"
output="intermediate_root.crt"

# 分割fullchain为单个证书文件
csplit -z "$input" '/-----BEGIN CERTIFICATE-----/' '{*}'

# 遍历每个分割后的证书,筛选CA证书
for cert in xx*; do
  if [ -s "$cert" ]; then
    openssl x509 -in "$cert" -noout -text | grep -q "CA:TRUE" && cat "$cert" >> "$output"
  fi
done

# 清理临时文件
rm -f xx*

说明:用csplit分割每个证书块,再逐一检查证书的CA属性,符合条件的证书会被写入目标文件。

使用Ansible模块实现

方式1:调用shell命令执行提取

直接在Ansible playbook中执行上述文本处理命令:

- name: 从fullchain提取根与中间证书(固定顺序场景)
  ansible.builtin.shell: |
    awk '/-----BEGIN CERTIFICATE-----/{i++} i>=2' fullchain.crt > intermediate_root.crt
  args:
    chdir: /path/to/your/cert/directory
    creates: intermediate_root.crt  # 避免重复执行

方式2:基于CA属性动态提取

如果需要兼容任意证书顺序,使用以下playbook:

- name: 动态提取fullchain中的CA证书
  ansible.builtin.shell: |
    csplit -z fullchain.crt '/-----BEGIN CERTIFICATE-----/' '{*}'
    for cert in xx*; do
      if [ -s "$cert" ]; then
        openssl x509 -in "$cert" -noout -text | grep -q "CA:TRUE" && cat "$cert" >> intermediate_root.crt
      fi
    done
    rm -f xx*
  args:
    chdir: /path/to/your/cert/directory
    creates: intermediate_root.crt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:06:11