有没有一种简单的方法来验证给定的私钥是否与给定的公钥匹配?我有*.pub
几个*.key
文件,我需要检查哪个文件。
同样,这些是 pub/key 文件,DSA。
我真的更喜欢某种单线...
有没有一种简单的方法来验证给定的私钥是否与给定的公钥匹配?我有*.pub
几个*.key
文件,我需要检查哪个文件。
同样,这些是 pub/key 文件,DSA。
我真的更喜欢某种单线...
我找到了一种似乎对我更有效的方法:
ssh-keygen -y -f <private key file>
该命令将输出给定私钥的公钥,因此只需将输出与每个 *.pub 文件进行比较。
我总是使用以下命令比较模数的 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
如果哈希匹配,那么这两个文件一起去。
对于 DSA 密钥,使用
openssl dsa -pubin -in dsa.pub -modulus -noout
打印公钥,然后
openssl dsa -in dsa.key -modulus -noout
显示与私钥对应的公钥,然后进行比较。
假设您在 X.509 证书中有公钥,并假设它们是 RSA 密钥,那么对于每个公钥,执行
openssl x509 -in certfile -modulus -noout
对于每个私钥,执行
openssl rsa -in keyfile -modulus -noout
然后按模数匹配键。
使用 diff 可以更轻松地进行检查:
diff <(ssh-keygen -y -f $private_key_file) $public_key_file
唯一奇怪的是,如果文件相同,diff 什么也不说,所以只有公共和私人不匹配时才会告诉你。
输入以下命令,检查私钥和公钥是否是$USER/.ssh 目录中的匹配集(相同)或不匹配集(不同)。cut 命令防止比较公钥中行尾的注释,只允许比较密钥。
ssh-keygen -y -f ~/.ssh/id_rsa | diff -s - <(cut -d ' ' -f 1,2 ~/.ssh/id_rsa.pub)
输出看起来像这些行中的任何一个。
Files - and /dev/fd/63 are identical
Files - and /dev/fd/63 differ
我编写了一个 shell 脚本,用户使用它来检查他们的 ~/.ssh/files 和匹配的密钥集的文件权限。它解决了我在用户事件设置 ssh 时遇到的挑战。它可能会帮助你。 https://github.com/BradleyA/docker-security-infrastructure/tree/master/ssh
注意:我之前的回答(2018 年 3 月)不再适用于最新版本的 openssh。上一个答案: diff -qs <(ssh-keygen -yf ~/.ssh/id_rsa) <(cut -d ' ' -f 1,2 ~/.ssh/id_rsa.pub)
删除公钥并从私钥生成新的。将它们保存在单独的目录中,或使用命名约定使它们保持直截了当。
用公钥加密一些东西,看看哪个私钥解密它。
这篇由Jeff Atwood撰写的Code Project 文章围绕 .NET 加密类实现了一个简化的包装器。假设这些密钥是为与 RSA 一起使用而创建的,请使用非对称类和您的公钥进行加密,并使用您的私钥进行解密。
最简单的方法是比较指纹,因为公钥和私钥相同。通过将两个命令放在同一行上,视觉比较非常容易:
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)
如果它什么都不返回,那么它们匹配:
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
只需使用puttygen并将您的私钥加载到其中即可。它提供了不同的选项,例如导出相应的公钥。