是否可以通过 openssl 命令或 ansible 模块 从包含服务器、中间证书和根证书的全链文件中仅提取根中间证书,例如:
全链.crt:
-----BEGIN CERTIFICATE -----
.
.
SERVER CRT
.
.
-----END CERTIFICATE -----
-----BEGIN CERTIFICATE -----
.
.
INTERMEDIATE CERT
.
.
-----END CERTIFICATE -----
-----BEGIN CERTIFICATE -----
.
.
ROOT CERT
.
.
-----END CERTIFICATE -----
我想要的是从全链中仅提取根证书和中间证书到另一个文件中
有几种方法可以做到这一点:
openssl crl2pkcs7 -nocrl -certfile fullchain.crt | openssl pkcs7 -print_certs -noout
类似上述提到的内容可能会为您提供您正在寻找的内容,并将生成主题和发行人。
awk '/-----BEGIN CERTIFICATE-----/{flag=1}/-----END CERTIFICATE-----/{print;flag=0}flag' fullchain.crt | tail -n +4 > root_intermediate.crt
- name: Extract Root and Intermediate Certificates
ansible.builtin.shell:
cmd: >
awk '/-----BEGIN CERTIFICATE-----/{flag=1}/-----END CERTIFICATE-----/{print;flag=0}flag' {{ fullchain_path }} | tail -n +4 > {{ output_path }}
args:
executable: /bin/bash
register: shell_output
基本上是使用shell的AWK方法
对于 Ansible,我投票支持第一或第二,我宁愿尽可能避免使用最佳实践建议的
ansible.builtin.shell
。