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

6

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

openssl x509 -in a.pem -text -noout

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

openssl x509 -in a.pem -pubkey -noout

返回以下格式的公钥:

-----BEGIN PUBLIC KEY-----
#######
####===
-----END PUBLIC KEY----

有更好的方法吗?我希望输出的格式是十六进制。

Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎不属于编程或开发范畴。请参阅帮助中心中的我可以在这里问什么样的问题。也许超级用户Unix&Linux Stack Exchange更适合提问。另请参阅我应该在哪里发布Dev Ops相关问题? - jww
1个回答

3
由于(经过讨论)它已经是以Base64(装甲ASCII)格式存在的自签名密钥,因此像tomeko.net这样的工具就足以将其编码为十六进制。
原始回答:
来自这篇文章,针对受信任的证书:

从 X.509 证书中解析公钥并将其表示为十六进制数,这很简单易行。

openssl x509 -modulus -noout < pub.cer | sed s/Modulus=/0x/

只需将 pub.cer 替换为您想要解析的证书文件即可。
这里使用了 模量选项
结果应该类似于:
0xB1E057678343....

注意:以上内容仅适用于包含以“-----BEGIN…”开头的ASCII(Base64)装甲数据的X.509v3文件(即实际的PEM文件)。
如果您收到以下错误,则表示您正在尝试查看DER编码证书:
unable to load certificate
PEM routines:PEM_read_bio:no start line:pem_lib.c:
Expecting: TRUSTED CERTIFICATE

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

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

openssl x509 -inform der -in certificate.cer -out certificate.pem

然后再试一次


1
感谢您的回复。但是在使用公钥时出现错误:无法加载证书49367:错误:0906D06C:PEM例程:PEM_read_bio:没有起始行:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.30.2/src/crypto/pem/pem_lib.c:648:期望:受信任的证书,在使用证书时出现错误:模数=错误的算法类型 - Gowtham
@GowthamG 您的私人pem证书是否是一个真正的X.509v3文件,其中包含以“-----BEGIN”为前缀的ASCII(Base64)装甲数据? - VonC
顺便提一下,它以 -----BEGIN CERTIFICATE----- 开头,以 -----END CERTIFICATE----- 结尾。 - Gowtham
没问题,原始证书只有pem格式。 - Gowtham
@GowthamG 那我想这是因为它是自签名证书而不是受信任的证书。 - VonC
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接