如何从 X.509 证书获取十六进制格式的公钥

Gow*_*nan 6 openssl cryptography x509

是否可以通过openssl仅获取十六进制格式的公钥?我使用过命令:

openssl x509 -in a.pem -text -noout
Run Code Online (Sandbox Code Playgroud)

这只是打印证书,其中公钥以十六进制格式提供,但我无法解析它。例如这个命令:

openssl x509 -in a.pem -pubkey -noout
Run Code Online (Sandbox Code Playgroud)

按以下格式返回公钥:

-----BEGIN PUBLIC KEY-----
#######
####===
-----END PUBLIC KEY----
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?我期待以十六进制格式输出。

Von*_*onC 3

由于(经过讨论)它是一个已经采用 Base64(Armored ASCII)格式的自签名密钥,因此像tomeko.net这样的工具足以将其编码为十六进制。

\n\n
\n\n

原答案:

\n\n

这篇文章中,对于受信任的证书:

\n\n
\n

解析 X.509 证书中的公钥并将其表示为十六进制数字非常简单。

\n
\n\n
openssl x509 -modulus -noout < pub.cer | sed s/Modulus=/0x/\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

只需将 pub.cer 替换为您要解析的证书文件即可

\n
\n\n

这使用了模数选项

\n\n

结果应该是这样的:

\n\n
0xB1E057678343....\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

注意:上述内容适用于包含 ASCII (Base64) 防护数据的 X.509v3 文件,前缀为 \xe2\x80\x9c\xe2\x80\x94\xe2\x80\x93 BEGIN \xe2\x80\xa6\xe2\ x80\x9d 行(即实际的 PEM 文件)。

\n\n

如果您收到以下错误,则意味着您正在尝试查看 DER 编码的证书:

\n\n
unable to load certificate\nPEM routines:PEM_read_bio:no start line:pem_lib.c:\nExpecting: TRUSTED CERTIFICATE\n
Run Code Online (Sandbox Code Playgroud)\n\n

对于 der 文件,另请注意DER 格式的公钥(这是一种将 X.509 对象表示为字节序列的方式)不仅包含模数,还包含指数(通常很短)和算法标识符

\n\n

首先将证书从 DER转换为 PEM :

\n\n
openssl x509 -inform der -in certificate.cer -out certificate.pem\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后再试一次

\n