如何从SSL证书中提取序列号

如何从SSL证书中提取序列号

我想知道从 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

相关内容