是否有一种简单的方法可以验证给定的私钥是否与给定的公钥匹配?我有几个* .pub和一些* .key文件,我需要检查哪个去了。
同样,这些是发布/密钥文件,DSA。
我真的更喜欢某种单线......
答案 0 :(得分:246)
我找到了一种似乎对我有用的方法:
ssh-keygen -y -f <private key file>
该命令将输出给定私钥的公钥,因此只需将输出与每个* .pub文件进行比较。
答案 1 :(得分:52)
我总是使用以下命令比较模数的MD5哈希值:
Certificate: openssl x509 -noout -modulus -in server.crt | openssl md5
Private Key: openssl rsa -noout -modulus -in server.key | openssl md5
CSR: openssl req -noout -modulus -in server.csr | openssl md5
如果哈希匹配,则这两个文件会一起使用。
答案 2 :(得分:46)
对于DSA密钥,请使用
openssl dsa -pubin -in dsa.pub -modulus -noout
打印公钥,然后
openssl dsa -in dsa.key -modulus -noout
显示与私钥对应的公钥,然后进行比较。
答案 3 :(得分:17)
假设您拥有x.509证书中的公钥,并假设它们是RSA密钥,那么对于每个公钥,请执行
openssl x509 -in certfile -modulus -noout
对于每个私钥,请执行
openssl rsa -in keyfile -modulus -noout
然后按模数匹配键。
答案 4 :(得分:14)
使用diff可以更轻松地进行检查:
diff <(ssh-keygen -y -f <private_key_file>) <public key file>
唯一奇怪的是,如果文件相同,diff就不会说任何内容,因此只会告诉你公共和私人是否匹配。
答案 5 :(得分:7)
删除公钥并从私钥生成新公钥。将它们保存在单独的目录中,或使用命名约定来保持它们。
答案 6 :(得分:2)
答案 7 :(得分:0)
使用公钥加密某些内容,并查看哪个私钥对其进行解密。
这个code project article正是由Jeff Atwood实现围绕.NET加密类的简化包装器。假设这些密钥是为与RSA一起使用而创建的,请使用带有公钥的非对称类进行加密,并使用私钥进行加密。
答案 8 :(得分:0)
如果不返回任何内容,则表示匹配:
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
答案 9 :(得分:0)
最简单的方法是比较指纹,因为公钥和私钥是一样的。通过将两个命令放在同一行,视觉比较非常容易:
ssh-keygen -l -f PRIVATE_KEY; ssh-keygen -l -f PUBLIC_KEY
以编程方式,你会想要忽略评论部分
diff -s <(ssh-keygen -l -f PRIVATE_KEY | cut -d' ' -f2) <(ssh-keygen -l -f PUBLIC_KEY | cut -d' ' -f2)
答案 10 :(得分:-2)
只需使用puttygen并将私钥加载到其中即可。提供不同的选择,例如导出同名公钥。