使用 OpenSSL 验证证书链

使用 OpenSSL 验证证书链

我需要 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以便更好地了解这一点。

相关内容