使用 OpenSSL 进行签名验证

使用 OpenSSL 进行签名验证

我一直在尝试使用 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您将要创建的新文件在哪里?

相关内容