Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenSSL无法加载公钥_Openssl_Ssh Keys - Fatal编程技术网

OpenSSL无法加载公钥

OpenSSL无法加载公钥,openssl,ssh-keys,Openssl,Ssh Keys,试图通过OSX Yosomite 10.10.2上的命令行加密文本消息 创建了public.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.tx

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

创建了public
.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
我得到
无法加载公钥

如果我随后键入:

openssl asn1parse -in id_rsa.pem
返回:
错误:偏移量太大

但我不知道如何修复它。
我应该做些什么来让它工作?

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

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提供的信息

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

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

我们现在知道了足够多的信息来调整示例以使其生效。 SSL公钥可以通过RSA公钥生成

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解决了这个问题。

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

openssl x509 -pubkey -noout -in cert.crt > pubKey.pem
之后,我想用下面的命令打印有关密钥的信息

openssl rsa -text -pubin -in pubKey.pem
并获取错误:
无法加载公钥

解决方案

我在记事本++中打开了pubKey.pem,在编码菜单中选择了UCS-2 LE BOM。所以我把它改成UTF-8编码。更改编码后,pubKey.pem的大小是原始大小的一半。然后它像魅力一样工作


在Windows和powershell中进行测试

您的初始解决方案应该可以正常工作。您只需输入一个小错误:要指定密钥格式(PKCS8),请使用“-m”选项,而不是“-t”选项(它代表密钥类型:dsa、ecdsa、ed25519或rsa)。请参阅手册页

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\u rsa-in~/Desktop/encrypted.txt-out~/Desktop/decrypted.txt

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

diff~/Desktop/myMessage.txt~/Desktop/decrypted.txt


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

如果我不想使用开放式ssl重新生成密钥怎么办?我遇到了同样的问题。当我在macOS上的
KeyChain
中生成证书时,它设置了
----开始RSA公钥---
----结束RSA公钥---
。当我尝试用Nginx加载证书时,它使用了OpenSSL,它需要
----开始公钥---
----结束公钥---