2013-01-18 22 views
5

我想初始化使用公钥的OpenSSL :: PKey :: RSA,它不工作。OpenSSL-既不PUB密钥也不PRIV键::嵌套asn1错误

下面是重点对:

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

有什么不对PUBLIC_KEY导致事情失败?

+0

那你用它来生成密钥对有哪些变化? – emboss

+5

既然整个互联网都知道你的私钥,我建议你创建一个新的私钥。你不会在一个问题中发布你的密码吗? – diedthreetimes

回答

3

它看起来像你在那里应该只有公钥本身无效。也许你在某个时候通过添加或删除一个额外的字符而意外地损坏了它们。您可以从测试这个关键,应该看到它首先生成一个OpenSSH密钥对

$ ssh-keygen -t rsa -b 1024 

运行Linux的命令找出

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) 

我产生了钥匙。然后我转换OpenSSH的风格公钥一个OpenSSL风格的键(PEM格式),将其存储在一个名为'pem'的文件中。

$ ssh-keygen -f testing_rsa.pub -e -m pem > pem 
+0

这对我有效。谢谢:) – khelll

5

关注此链接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)) 
+0

感谢一吨这个答案,结束了我的奋斗...... –

0

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

我希望这可以帮助你。所以,请再次检查您的钥匙。

0

当天我遇到了同样的问题,更改密码可能会对您有所帮助。因此请验证您的密码并在通知类中更改它。我希望这可以帮助您。

我在文件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. 
相关问题