Ruby OpenSSL-既不是发布密钥也不是私有密钥::嵌套asn1错误
我试图使用公钥初始化OpenSSL::PKey::RSA,但它不起作用 以下是密钥对:Ruby OpenSSL-既不是发布密钥也不是私有密钥::嵌套asn1错误,ruby,openssl,rsa,Ruby,Openssl,Rsa,我试图使用公钥初始化OpenSSL::PKey::RSA,但它不起作用 以下是密钥对: -----BEGIN RSA PRIVATE KEY----- MIIBOwIBAAJBALbkpbDFbZ54bM5ybwwdCqsUHjxWQF4B0Q1sAOBFEYdpxZJZ8dAz ycPzIgSlPc8yqjeqwJQtvCpktrntALpX1ksCAwEAAQJAYT0XyvBs48BrOSgmWm5m aab8nF/PQSv+FgDCRnryYue3WZOpUqITB0w6ivC68G/+
-----BEGIN RSA PRIVATE KEY-----
MIIBOwIBAAJBALbkpbDFbZ54bM5ybwwdCqsUHjxWQF4B0Q1sAOBFEYdpxZJZ8dAz
ycPzIgSlPc8yqjeqwJQtvCpktrntALpX1ksCAwEAAQJAYT0XyvBs48BrOSgmWm5m
aab8nF/PQSv+FgDCRnryYue3WZOpUqITB0w6ivC68G/+Mf6IXyE4ljqw2iIAdjyv
YQIhAOE20o2bLPMtziEOdH0KGpN0gNYpe38jGyvGw7k5gZd9AiEAz+TWZRJpc9yX
5dew3xcBtIhaTPFmVLgmfU7FwIWW32cCIQCvKK9LmUO1gouN5CsvUNtokbTeW/cD
467vNjDlb1deFQIhAK55pZ1p2GrOpgTWArEYg+vZy79rkbBkZJkh9UFgXIDdAiBm
Rglcmt9cD2Vqg7xMr7cP3FJbSmJffSwYve1fazuZOw==
-----END RSA PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MEoCAQACQLbkpbDFbZ54bM5ybwwdCqsUHjxWQF4B0Q1sAOBFEYdpxZJZ8dAzycPz
IgSlPc8yqjeqwJQtvCpktrntALpX1ksCAwEAAQ==
-----END PUBLIC KEY-----
OpenSSL::PKey::RSA.new(private_key) # WORKS!
OpenSSL::PKey::RSA.new(public_key) # FAILS!
OpenSSL::PKey::RSAError: Neither PUB key nor PRIV key:: nested asn1 error
from (irb):16:in `initialize'
from (irb):16:in `new'
from (irb):16
from /Users/dhracker/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.8/lib/rails/commands/console.rb:47:in `start'
from /Users/dhracker/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.8/lib/rails/commands/console.rb:8:in `start'
from /Users/dhracker/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.8/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
another_public_key = OpenSSL::PKey::RSA.new(512).public_key
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMS6XZD2NHTCwdgT+A2/PkStyJwYX/Qu
mfCyZc5TE5IZYaKsBg4uGcI97r8lxEv6rx5b0b6cIwQ7A7e6CUVph5MCAwEAAQ==
-----END PUBLIC KEY-----
OpenSSL::PKey::RSA.new(another_public_key) # WORKS!
----开始RSA私钥-----
MIIBOwIBAAJBALbkpbDFbZ54bM5ybwwdCqsUHjxWQF4B0Q1sAOBFEYdpxZJZ8dAz
YCPZIGSLPC8YQJEQWJQTVCPKTRNTALPX1KSCAWEAAQJAYT0XYVBS48BROSGM5M
aab8nF/PQSv+fgdcrnyyue3wzopuqitb0w6ivc68g/+mf6ixye4ljqw2iadjyv
YQiHaoE20O2BLPMZIEODH0Kgpn0GnYpe38JGyVgW7K5GzD9IEAZ+TWZRJpc9yX
5DEW3xCbTihatPfMVLGMFU7FWIWW32CiQCVKK9LmUO1GUN5CvUntoKBTEW/cD
467vNjDlb1deFQIhAK55pZ1p2GrOpgTWArEYg+VZY79RKBKZJKH9UFGXIDDAIBM
Rglcmt9cD2Vqg7xMr7cP3FJbSmJffSwYve1fazuZOw==
-----结束RSA私钥-----
-----开始公钥-----
MEOCAQAQLBKPBDFBZ54BM5YBWWDCQSUHJXWQF4B0Q1SAOBFEYDPZJZ8DAZYCPZ
IgSlPc8yqjeqwJQtvCpktrntALpX1ksCAwEAAQ==
-----结束公钥-----
OpenSSL::PKey::RSA.new(私钥)#有效!
OpenSSL::PKey::RSA.new(公钥)失败!
OpenSSL::PKey::RSAError:既不是PUB密钥也不是PRIV密钥::嵌套asn1错误
from(irb):16:in“initialize”
发件人(irb):16:in“new”
起始(irb):16
来自/Users/dhracker/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.8/lib/rails/commands/console.rb:47:in'start'
来自/Users/dhracker/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.8/lib/rails/commands/console.rb:8:in'start'
来自/Users/dhracker/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.8/lib/rails/commands.rb:41:in`'
来自脚本/rails:6:in'require'
来自脚本/rails:6:in`'
另一个公开密钥=OpenSSL::PKey::RSA.new(512).public\u密钥
-----开始公钥-----
MFWWDQYJKOZHIHVCNAQEBQADSWAWSAJBAMS6XZD2NHTCWDGT+A2/PkStyJwYX/Qu
MFCYZC5TE5IZYAKSBG4UGCI97R8LXEV6RX5B0B6CIWQ7A7E6CUVPH5MCAWEAQ==
-----结束公钥-----
OpenSSL::PKey::RSA.new(另一个公钥)#有效!
公钥有什么问题导致了失败?看起来您的公钥应该可以工作,但公钥本身无效。也许你在某个时候无意中添加或删除了一个额外的角色,从而弄坏了它们。您可以测试这把钥匙,应该会看到它的工作
public_key = "-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEAoxi2V0bSKqAqUtoQHxWkOPnErCS541r6/MOSHmKOd6VSNHoBbnas\nZRQSDUTbffB6C++DbmBCOHmvzYORD0ZWYgyMcgbYJD48Z2fe0nm+WMYN5u8DPnTP\nvf8b/rJBxGF0dsaoFAWlB81tTnKFCxAbCSgfmQt+Vd4qupGZ5gGu9uoKlaPjmYuA\nIxIjUMcu3dov7PQ+PZIvdkM0fiz8YIl8zo+iWWyI2s6/XLoZJ4bYs2YJHZDf6biU\nsZhs8xqh/F6qlcRt3Ta25KMa0TB9zE3HHmqA/EJHFubWFRCrQqpboB0+nwCbmZUl\nhaxA79FRvYtORvFAoncoFD4tq3rGXcUQQwIDAQAB\n-----END RSA PUBLIC KEY-----\n"
OpenSSL::PKey::RSA.new(public_key)
我通过首先运行linux命令生成openSSH密钥对来生成密钥
$ ssh-keygen -t rsa -b 1024
然后我将OpenSSH样式的公钥转换为OpenSSL样式的密钥(PEM格式),并将其存储在名为“PEM”的文件中
$ ssh-keygen -f testing_rsa.pub -e -m pem > pem
通过这个链接,我获得了更多的成功
require 'openssl'
require 'base64'
public_key = "MIIBCgKCAQEA20O377QEiZvPsj14LKl2xO23iirJB5WDTVjeab1cIOJu1vbV+Pdwl1Bov8m896ZG4K0S/qvfJcdHLovr2WJ+o2maK1XZCNy8lA" +
"zIPzZrj/yDZAB2GSjR3in1lQRQPtWjIOdB8Cy2FGybEstIkpf8MD3XMWp5g8BtdOv43ekjBuTiGGLlPRG0+IiazjHlWjyl6DU9x9m2Jxks0H6YZud6zf4s9Q6" +
"9vPUYgOZXWs7IghxqrVGE5mWxoRudsDFhLYP706+IrSxGOf5fE0/8fjtzj/eJayCLmkUWq/xsts5tBAbwsX5xKdk8iD0OU2qOEbVuiYmehEiJnvO2vyd+t76C" +
"xwIDAQAB"
rsa_public_key = OpenSSL::PKey::RSA.new(Base64.decode64(public_key))
我也面临同样的问题,我尝试了很多不同的解决方案。 但实际问题在于我提供的
键
。
密钥的格式应正确。不应该有任何额外字符或\n\t
我希望这对你有帮助。所以,请再次检查您的钥匙 就在同一天,我遇到了同样的问题,更改密码可能会对你有所帮助。因此,请验证您的密码短语并在通知类中进行更改。我希望这可能会对您有所帮助 我在文件
app/jobs/notification\u job.rb中更改了
certificate: Rails.root.join('Your Pem File Name Goes Here'),# required
passphrase: "PASSPHRASE GOES HERE", # optional
gateway: "gateway.push.apple.com", # optional; See note below.
# gateway: "gateway.sandbox.push.apple.com", # optional; See note below.
您使用了什么来生成密钥对?既然整个internet都知道您的私钥,我建议您创建一个新的密钥对。你不会在问题中发布你的密码,是吗?你如何在测试中使用?创建一个假钥匙,怎么做呢?