OpenSSL – 既不是PUB密钥也不是PRIV密钥::嵌套asn1错误

我试图使用公钥初始化OpenSSL :: PKey :: RSA,但它无法正常工作。

以下是密钥对:

-----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 `' from script/rails:6:in `require' from script/rails:6:in `' 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! 

public_key导致事情失败的问题是什么?

点击此链接http://skim.la/2012/01/16/rsa-public-key-interoperability-between-ruby-and-android/我以这种方式取得了更大的成功。

 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)) 

看起来你在那里应该只工作公钥本身是无效的。 也许你在某些时候通过偶然添加或删除一个额外的角色来破坏它们。 您可以测试此密钥,并且应该看到它正常运行

 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 

我遇到了同样的问题,我在互联网上尝试了很多不同的解决方案。 但实际问题在于我提供的key 。 密钥的格式应该是正确的。 不应该有任何额外的字符或\n , \t

我希望这对你有帮助。 所以,请再次检查你的密钥。

同一天,我遇到了同样的问题,更改密码可能会对你有所帮助。 因此,请validation您的密码并在通知类中进行更改。我希望这可能会对您有所帮助。

我在文件app/jobs/notification_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.