如何从证明证书中提取公钥以用于签名验证?

如何从证明证书中提取公钥以用于签名验证?

我想从证书中提取公钥来验证给定的签名(回答我自己的问题与注册部分相关)。

我尝试openssl x509 -in certificate.pem -pubkey -noout | openssl enc -base64 -d > publickey.pub用 读取它,hexdump -C publickey.pub 我得到了一个十六进制字符串,长度为 182 个字符。我预期是 128,因为我需要两个坐标,长度为 64 个字符。

我认为我只有公钥,还有标头或其他任何东西。所以你愿意帮我如何在十六进制字符串中提取公钥吗?

答案1

openssl x509手册页将该选项描述-pubkey为:

-pubkey
        以 PEM 格式输出证书的 SubjectPublicKeyInfo 块。

PEM 格式由 Base64 编码的 DER 文件组成,添加了页眉和页脚行。一旦您删除页眉和页脚并对数据进行 Base64 解码(您的openssl enc命令确实应该这样做),您将得到一个 DER 文件,其中包含ASN.1二进制编码的数据。

你的错误在于尝试直接使用十六进制编辑器读取 DER 输出。相反,你需要使用 ASN.1 解析器对其进行解码,例如openssl asn1parse

或者,您可能更喜欢简单地使用:

openssl x509 -in certificate.pem -text -noout

并从(或多或少)人类可读的-text输出中提取公钥坐标(可能以十六进制字节序列显示)。

相关内容