我一直在尝试使用 OpenSSL 和 OpenSSH,但无法使用 RSA 密钥对进行签名和验证。
我做了以下事情
生成的密钥对:
$ ssh-genkey -b 2048 -t rsa <key-name>
然后我通过以下方式创建了一个消息摘要:
$ openssl sha1 -sign <key-name> -out rsasign.bin ~/tmp/test.txt
我尝试使用相应的公钥来验证签名:
$ openssl sha1 -verify <key-name>.pub -signature rsasign.bin ~/tmp/test.txt
不幸的是,尝试这个会返回错误:
unable to load key file
有人能看出我所做的事情有什么问题吗?
谢谢!
答案1
首先,我假设你的意思是ssh-keygen
,不是ssh-genkey
(此外,我的版本要求以交互方式指定路径,而不是通过命令行,但输出是相同的)。:)
问题在于 OpenSSL 使用的公钥格式与 SSH 不同。您仍然可以使用 SSH 生成的密钥,但您需要以 OpenSSL 可以理解的格式获取公钥。您可以使用以下命令执行此操作:
openssl rsa -in <key-name> -pubout -out public-key.pem
public-key.pem
您要创建的新文件在哪里。完成此操作后,您提到的验证命令成功运行,仅Verified OK
针对我的测试文件输出。
请注意,上述命令需要私人的密钥,而不是公钥;您可以通过运行以下命令将 SSH 样式的公钥转换为 OpenSSL 样式的公钥:
ssh-keygen -f <key-name>.pub -e -m public-key.pem
public-key.pem
您将要创建的新文件在哪里?