我想从证书中提取公钥来验证给定的签名(回答我自己的问题与注册部分相关)。
我尝试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
输出中提取公钥坐标(可能以十六进制字节序列显示)。