如何找出一个OpenSSL证书是由某个私钥创build的?

我有一个OpenSSL证书。 我也需要私钥。 我被告知它位于服务器上的某个地方,而且足够真实,我发现了多个SSL密钥文件。

在我用蛮力试用它们之前:如果使用私钥来创build证书,有没有办法在terminal上find?

这个经典的参考资料是在线的Apache文档中的这个FAQ 。

在该文件中,使用模数的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 

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

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

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

这只是一个比Andrew Schulman的答案更方便的比较string,当然这也是有效的。

这里另有参考。

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

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

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