OpenSSL无法加载公钥

时间:2015-03-12 13:21:47

标签: openssl ssh-keys

尝试在OSX Yosomite 10.10.2上通过命令行加密文本消息

像这样创建公共.pem密钥:

ssh-keygen -f ~/.ssh/id_rsa.pub -e -t PKCS8 > id_rsa.pem

如果我尝试加密myMessage.txt

openssl rsautl -encrypt -inkey ~/.ssh/id_rsa.pem -pubin -in ~/Desktop/myMessage.txt -out ~/Desktop/encrypted.txt

我得到unable to load Public key

如果我输入:

openssl asn1parse -in id_rsa.pem

返回:Error: offset too large

但我不知道如何解决它。 我应该改变什么才能使它发挥作用?

4 个答案:

答案 0 :(得分:21)

仍然不知道我的问题出了什么问题,但找到了解决方案:

1)生成RSA密钥:

$ openssl genrsa -out key.pem 1024 
$ openssl rsa -in key.pem -text -noout 

2)将公钥保存在pub.pem文件中:

$ openssl rsa -in key.pem -pubout -out pub.pem 
$ openssl rsa -in pub.pem -pubin -text -noout 

3)加密一些数据:

$ echo test test test > file.txt 
$ openssl rsautl -encrypt -inkey pub.pem -pubin -in file.txt -out file.bin 

4)解密加密数据:

$ openssl rsautl -decrypt -inkey key.pem -in file.bin 

它就像一个魅力

感谢Marek Marcola提供的信息http://openssl.6102.n7.nabble.com/Re-Can-I-use-my-own-keys-with-openssl-for-RSA-enc-dec-td12506.html

答案 1 :(得分:2)

我也遇到了这个问题,并且认为这里有一个很好的提示:

How can I transform between the two styles of public key format, one "BEGIN RSA PUBLIC KEY", the other is "BEGIN PUBLIC KEY"

OpenSSL加密命令似乎需要SSL公钥而不是RSA公钥。

我们现在已经足够了解调整示例以使其工作。 可以使用

从RSA公钥生成SSL公钥
openssl rsa -in id_rsa.pem -RSAPublicKey_in -pubout > id_pub.pem

然后可以使用

执行加密步骤
openssl rsautl -encrypt -inkey id_pub.pem -pubin -in ~/Desktop/myMessage.txt -out ~/Desktop/encrypted.txt

截至本文撰写时,MacOSX Yosemite中的默认OpenSSL命令似乎为0.9.8zg。此版本中的 rsa 命令不支持运行上述第一个命令的功能。我通过安装OpenSSL 1.0.1p解决了这个问题。

答案 2 :(得分:0)

从证书中提取公钥时,我遇到了同样的问题。

openssl x509 -pubkey -noout -in cert.crt > pubKey.pem

然后,我想在下面的命令中打印有关key的信息。

openssl rsa -text -pubin -in pubKey.pem

并收到错误消息:unable to load Public Key

解决方案

我在notepad ++中打开pubKey.pem,并在 Encoding 菜单中选择了UCS-2 LE BOM。所以我将其更改为UTF-8编码。更改编码后,pubKey.pem的大小是原始大小的一半。然后,它就像魅力。

在Windows和powershell中进行了测试

答案 3 :(得分:0)

您的初始解决方案应该可以解决,您只需输入一个较小的错字即可:要指定密钥格式(PKCS8),请使用“ -m”选项,而不要使用“ -t”选项(代表密钥类型:dsa,ecdsa, ed25519或rsa)。请参见ssh-keygen手册页。

  

ssh-keygen -f〜/ .ssh / id_rsa.pub -e -m PKCS8> id_rsa.pem

然后,您可以使用以下密码进行加密:

  

openssl rsautl -encrypt -inkey〜/ .ssh / id_rsa.pem -pubin -in〜/ Desktop / myMessage.txt -out〜/ Desktop / encrypted.txt

而且,您可以使用

进行解密
  

openssl rsautl -decrypt -inkey〜/ .ssh / id_rsa -in〜/ Desktop / encrypted.txt -out〜/ Desktop / decrypted.txt

您可以使用文本编辑器或以下 diff 命令来检查原始文件和解密文件之间的差异:

  

diff〜/ Desktop / myMessage.txt〜/ Desktop / decrypted.txt

实际上, openssl rsautl -encrypt 命令期望使用“ PEM PKCS8公共密钥”编码格式的公共密钥,但是 ssh-keygen 会以这种格式生成私有密钥,适用于~/.ssh目录中的 authorized_keys 文件的其他格式的公共密钥(您可以使用文本编辑器打开密钥以查看格式之间的差异)。