如何从OpenSSL输出中提取第一个BEGIN/END证书块?
提取第一个SSL证书块的命令修改方法
原命令用sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p'会输出所有证书块,要只提取第一个的话,只需让sed匹配完第一个证书块后直接退出即可,修改后的完整命令如下:
openssl s_client -showcerts -connect services.americanexpress.com:443 | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/{p; /-----END CERTIFICATE-----/q}'
原理说明
- 保留原有的范围匹配规则
/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/,确保只处理证书块内容 - 在范围块内添加
p; /-----END CERTIFICATE-----/q逻辑:先打印当前行内容,当匹配到证书结束标记时,执行q命令让sed直接退出,避免继续处理后续的其他证书块
如果习惯用awk工具,也可以用以下命令实现同样效果:
openssl s_client -showcerts -connect services.americanexpress.com:443 | awk '/-----BEGIN CERTIFICATE-----/{flag=1} flag{print; if(/-----END CERTIFICATE-----/) exit}'
内容的提问来源于stack exchange,提问作者user1068636
相关产品推荐
相关产品推荐

