我想知道从 PEM 格式的 SSL 证书中提取序列号的最佳方法是什么。
之后,我想按以下格式格式化证书hexhex:hexhex:...:hexhex
,例如,如果我的 SSL 证书的十六进制序列号是
0123456709AB
输出应该是
01:23:45:67:09:AB
作为优先选择,我想使用 openssl 和 x509 选项使用单行 UNIX 命令来完成此操作
答案1
尝试:
openssl x509 -noout -serial -in cert.pem | cut -d'=' -f2 | sed 's/../&:/g;s/:$//'
openssl x509 -noout -serial -in cert.pem
将输出证书的序列号,但格式为serial=0123456709AB
.
因此,它通过管道传输到cut -d'=' -f2
,将输出按等号分割并输出第二部分 - 0123456709AB
。
即发送至sed
.该sed
命令的第一部分s/../&:/g
每两个字符分割字符串 ( ..
) 并插入冒号 ( :
)。这会导致01:23:45:67:89:AB:
(注意末尾的冒号)。
命令的第二部分sed
( s/:$//
) 在输出末尾搜索冒号并将其替换为空字符串,从而得到所需的输出。
或者一个openssl
唯一sed
的答案:
openssl x509 -noout -serial -in test2.crt | sed 's/.*=//g;s/../&:/g;s/:$//'
s/.*=//g
命令开头添加的sed
取代了cut
第一个版本中的 。
答案2
openssl x509 -noout -text -in [cert]
正在为您提供有关证书的更多信息,如果您只想要序列号,您可以在那里 grep 获取该序列号,即。
... | grep -A1 "Serial Number"
这将产生如下生成输出:
Serial Number:
07:bf:0e:14:95:e7:1e:34:a2:b1:8b:df:ca:dd:ab:af:af:fb:50:fb
要删除Serial Number:
文本,请添加一个tail -1
完整的命令将是:
openssl x509 -noout -text -in [cert] | grep -A1 "Serial Number" | tail -1