我需要 OpenSSL 命令来验证证书链。在证书中,签名哈希由签名者的私钥签名。
答案1
楼主,请注意签署消息不同于使用私钥加密消息。 作为@dave_thompson_085指出这里和这里, 这是一个经常重复但不正确的比喻,这往往会导致混淆,就像这个案例一样。一些人推测,造成这种误解的原因在于后迪斯科流行音乐的有害影响(看@Thomas Pornin的回答这里),但我们永远无法知道确切答案。
话虽如此,openssl pkeyutl
可以用来创建数字签名和验证数字签名。使用上面创建的密钥,我们可以使用签名者的私钥 (private.pem) 对消息 (message.txt) 进行签名,并将签名存储在文件 (signature.bin) 中,如下所示:
openssl pkeyutl -sign -in message.txt -inkey private.pem -out signature.bin
然后,给定签名者的公钥(public.pem)、消息(message.txt)和签名(signature.bin),我们可以验证签名,如下所示:
openssl pkeyutl -verify -pubin -inkey public.pem -sigfile signature.bin -in message.txt
上述命令应该产生:
Signature Verified Successfully
OP 评论说他对使用 openssl 来验证证书链中的签名很感兴趣。如果您已经下载了证书链(例如使用openssl s_client
),那么可以使用来完成openssl verify
。请参阅https://www.misterpki.com/openssl-verify/以便对此进行良好的描述。
如果您有兴趣亲自动手,亲眼看看openssl verify
在证书链中验证签名的繁重工作 - 那么这需要解析 x509 证书结构中的信息,并深入了解 ASN.1 和 DER 格式等。请查看https://kulkarniamit.github.io/whatwhyhow/howto/verify-ssl-tls-certificate-signature.html以便更好地了解这一点。