我有一个 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
当且仅当公钥相同时,证书和私钥才匹配。