Lok*_*oki 160 encryption ssl openssl key
有一种简单的方法可以验证给定的私钥是否与给定的公钥匹配?我有一些*.pub和一些*.key文件,我需要检查哪个与哪个.
同样,这些是发布/密钥文件,DSA.
我真的更喜欢某种单线......
Lok*_*oki 252
我找到了一种似乎对我更有效的方法:
ssh-keygen -y -f <private key file>
Run Code Online (Sandbox Code Playgroud)
该命令将输出给定私钥的公钥,因此只需将输出与每个*.pub文件进行比较.
小智 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
Run Code Online (Sandbox Code Playgroud)
如果哈希匹配,那么这两个文件会一起出现.
Mar*_*wis 47
对于DSA密钥,请使用
openssl dsa -pubin -in dsa.pub -modulus -noout
Run Code Online (Sandbox Code Playgroud)
然后打印公钥
openssl dsa -in dsa.key -modulus -noout
Run Code Online (Sandbox Code Playgroud)
显示与私钥对应的公钥,然后比较它们.
Mar*_*wis 18
假设您拥有x.509证书中的公钥,并假设它们是RSA密钥,那么对于每个公钥,请执行此操作
openssl x509 -in certfile -modulus -noout
Run Code Online (Sandbox Code Playgroud)
对于每个私钥,请执行
openssl rsa -in keyfile -modulus -noout
Run Code Online (Sandbox Code Playgroud)
然后按模数匹配键.
Joh*_* D. 16
差异可以通过差异进行检查:
diff <(ssh-keygen -y -f <private_key_file>) <public key file>
Run Code Online (Sandbox Code Playgroud)
唯一奇怪的是,如果文件是相同的,diff不会说什么,所以只有当公共和私人不匹配时才会被告知.
输入以下命令,检查$USER/.ssh 目录中的私钥和公钥是匹配集(相同)还是不匹配集(不同)。cut 命令阻止比较公钥中行尾的注释,只允许比较密钥。
ssh-keygen -y -f ~/.ssh/id_rsa | diff -s - <(cut -d ' ' -f 1,2 ~/.ssh/id_rsa.pub)
Run Code Online (Sandbox Code Playgroud)
输出将类似于这些行中的任何一行。
Files - and /dev/fd/63 are identical
Files - and /dev/fd/63 differ
Run Code Online (Sandbox Code Playgroud)
我写了一个 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)