你如何testing公共/私人DSA密钥对?
有没有简单的方法来validation给定的私钥是否与给定的公钥相匹配? 我有几个* .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就什么也不说,所以只有当公共和私人不匹配时才会被告知。
删除公钥并从私钥生成新公钥。 将它们保存在不同的目录中,或者使用命名约定来保持它们平直。
所有上面的答案都假设给定的私钥 – 你一无所知,并且想知道它是否与给定的公钥相匹配 – HAS NO PASSPHRASE。 如果私钥有密码,则两者都有
ssh-keygen -y -f PRIVATEKEY
和
openssl(rsa或dsa)-in PRIVATEKEY -modulus -noout
请求密码。 如果你有一个UNKNOWN私钥,你不知道它是否有密码 – 更不用说密钥有密码了。
所以实际上,值得尝试一下上面的命令,但是如果他们要求input密码,就会卡住:无法提取公钥,并且它的模数与公钥文件的第二个字段匹配。 有谁知道这个方法吗?
如果你在Windows中,想要使用GUI,可以用puttygen将你的私钥导入:
一旦导入,您可以保存其公钥并将其与您的公钥进行比较。
用公钥encryption一些东西,看看哪个私钥解密了。
这个代码项目文章是由Jeff Atwood在.NETencryption类中实现的一个简化的包装。 假设这些密钥是为了与RSA一起使用而创build的,请使用不对称类与您的公共密钥进行encryption,然后使用您的私钥解密。
只需使用puttygen并将您的私钥加载到其中即可。 提供不同的选项,例如导出核心申请公钥。