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

Gab*_*dez 5 openssl

我想知道从 PEM 格式的 SSL 证书中提取序列号的最佳方法是什么。

之后,我想以以下格式格式化证书,hexhex:hexhex:...:hexhex 例如,如果我的十六进制 SSL 证书的序列号是

0123456709AB
Run Code Online (Sandbox Code Playgroud)

输出应该是

01:23:45:67:09:AB
Run Code Online (Sandbox Code Playgroud)

作为偏好,我想使用单行 UNIX 命令使用 openssl 和 x509 选项来完成此操作

gar*_*Red 8

尝试:

openssl x509 -noout -serial -in cert.pem | cut -d'=' -f2 | sed 's/../&:/g;s/:$//'
Run Code Online (Sandbox Code Playgroud)

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/:$//) 搜索输出末尾的冒号并将其替换为空字符串,从而得到所需的输出。


或为opensslsed唯一的答案:

openssl x509 -noout -serial -in test2.crt |  sed 's/.*=//g;s/../&:/g;s/:$//'
Run Code Online (Sandbox Code Playgroud)

s/.*=//gsed命令开头添加的替换了cut第一个版本中的 。