如何查明 OpenSSL 证书是否由某个私钥创建?

如何查明 OpenSSL 证书是否由某个私钥创建?

我有一个 OpenSSl 证书。我还需要私钥。有人告诉我它位于服务器上的某个地方,果然,我找到了多个 SSL 密钥文件。

在我尝试所有暴力破解方法之前:有没有办法在终端上查明是否使用私钥来创建证书?

答案1

经典参考是此常见问题解答在线 Apache 文档中。

在该文档中,md5使用模数是因为

由于公共指数通常为 65537,并且很难目视检查长模数是否相同,因此可以使用以下方法

得出:

$ openssl rsa -noout -modulus -in key.pem.decrypted | openssl md5
(stdin)= 9fxxfoobar558d9xx0045a89467d2bxx

$ openssl x509 -noout -modulus -in crt.pem | openssl md5
(stdin)= 9fxxfoobar558d9xx0045a89467d2bxx

我建议使用过程替换来避免模量的视觉比较:

$ diff \ 
    <(openssl x509 -noout -modulus -in cert.pem) \
    <(openssl rsa -noout -modulus -in key.pem.decrypted)

如果输出为空,则表示私钥与证书匹配。

这只是一种比 Andrew Schulman 的答案中的方法更方便的比较字符串的方法,当然这也是有效的。

另一个参考这里

答案2

要检查证书文件是否认证与给定私钥文件关联的公钥,请比较与每个私钥关联的公钥:

openssl rsa -in KEYFILE -pubout
openssl x509 -in CERTFILE -pubkey -noout

当且仅当公钥相同时,证书和私钥才匹配。

相关内容