如何将私钥与提供的证书匹配?

Ev.*_*Ev. 5 encryption certificate openssl

有人给了我一个证书和几个私钥/公钥,然后说,“告诉我哪个私钥与证书匹配。” 我怎么做?

证书采用 PKCS #7 格式并以以下内容开头:

-----BEGIN CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

钥匙看起来都不一样。其中一些实际上是公钥 - 有些我不确定。它们有不同的扩展名并以不同的字符串开头,例如:

-----BEGIN PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
-----BEGIN EC PARAMETERS-----
Run Code Online (Sandbox Code Playgroud)
-----BEGIN RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?我想我可以使用 openssl 命令行工具。

Esa*_*nen 6

基于验证私钥匹配证书(最初来自Apache SSL 常见问题)中给出的命令,可以构建一个小的 bash 脚本,该脚本遍历*.key文件夹中的所有文件,并一次将证书的模数部分与每个密钥进行比较.

Myfindkey.sh将证书的文件名作为命令行参数并打印匹配项。

#!/bin/bash
cert=$1
crthash=$(openssl x509 -noout -modulus -in "$cert" | openssl md5)
echo $cert $crthash

for file in *.key; do
    [ -e "$file" ] || continue
    keyhash=$(openssl rsa -noout -modulus -in "$file" | openssl md5)
    if [ "$keyhash" = "$crthash" ]
    then
        keytest==$(openssl rsa -in "$file" -check -noout)
        echo $file $keyhash $keytest
    fi
done
Run Code Online (Sandbox Code Playgroud)

我创建了一些密钥对testN.key/testN.crt并测试了我的脚本,这似乎可以完成这项工作:

./findkey.sh test4.crt
test4.crt (stdin)= 8e30eac60ff8d3c5b1c9bee7e79774bb
test4.key (stdin)= 8e30eac60ff8d3c5b1c9bee7e79774bb =RSA key ok
Run Code Online (Sandbox Code Playgroud)

如果有按键之间的一些证书(或证书请求),因为即使不正确地命名为没关系*.keyopenssl rsa -modulus将给予unable to load Private Key,而不是模证书错误。另外,行尾告诉密钥是否一致,防止伪造私钥。您只需要安装此脚本和 OpenSSL。


小智 0

您可以使用证书密钥匹配器工具来检查您的私钥是否与证书匹配,如下所示:

https://www.sslshopper.com/certificate-key-matcher.html

此外,如果您想使用 openssl 命令行工具,建议阅读以下内容:

  • 使用任何处理密钥服务器端的网站都是**高度不安全**。甚至该网站本身也指出了这一点:_“为了完全安全,我们建议您使用上面的 OpenSSL 命令手动检查服务器上私钥的公钥哈希”_。 (6认同)