【问题标题】:OpenSSL unable to load Public KeyOpenSSL 无法加载公钥
【发布时间】:2015-05-14 16:19:00
【问题描述】:

尝试在 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

但我不知道如何解决它。 我应该改变什么才能让它工作?

【问题讨论】:

  • 我遇到了同样的问题。当我在 macOS 上的 KeyChain 中生成证书时,它设置了 -----BEGIN RSA PUBLIC KEY----------END RSA PUBLIC KEY-----。当我尝试使用 Nginx 加载证书时,它使用了 OpenSSL,它需要 -----BEGIN PUBLIC KEY----------END PUBLIC KEY-----

标签: openssl ssh-keys


【解决方案1】:

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

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

【讨论】:

  • 如果我不想使用 open ssl 重新生成密钥怎么办?
【解决方案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 解决了这个问题。

【讨论】:

    【解决方案3】:

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

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

    之后,我想用下面的命令打印有关键的信息。

    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 中测试

    【讨论】:

      【解决方案4】:

      您的初始解决方案应该可以工作,您只是有一个小错字:要指定密钥格式(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 命令检查原始文件和解密文件之间的差异:

      差异 ~/Desktop/myMessage.txt ~/Desktop/decrypted.txt

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-10
        • 2012-04-14
        • 2013-07-22
        • 2015-07-07
        • 2011-07-19
        • 1970-01-01
        • 2013-06-09
        • 2021-03-04
        相关资源
        最近更新 更多