如何确定 OpenSSL 证书是否由某个私钥创建?

k0p*_*kus 7 bash openssl ssl-certificate private-key

我有一个 OpenSSL 证书。我也需要私钥。有人告诉我它位于服务器上的某个地方,确实如此,我发现了多个 SSL 密钥文件。

在我通过蛮力尝试所有这些之前:有没有办法在终端上找出是否使用私钥来创建证书?

daw*_*wud 9

对此的经典参考是在线 Apache 文档中的这个 FAQ

在该文件中,使用md5模数的an是因为

由于公共指数通常是 65537 并且很难直观地检查长模数是否相同,您可以使用以下方法

这给出:

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

$ openssl x509 -noout -modulus -in crt.pem | openssl md5
(stdin)= 9fxxfoobar558d9xx0045a89467d2bxx
Run Code Online (Sandbox Code Playgroud)

我建议使用过程替换来避免对模数进行视觉比较:

$ diff \ 
    <(openssl x509 -noout -modulus -in cert.pem) \
    <(openssl rsa -noout -modulus -in key.pem.decrypted)
Run Code Online (Sandbox Code Playgroud)

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

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

这里的另一个参考。


And*_*man 7

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

openssl rsa -in KEYFILE -pubout
openssl x509 -in CERTFILE -pubkey -noout
Run Code Online (Sandbox Code Playgroud)

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