2013-01-18 61 views
5

मैं सार्वजनिक कुंजी का उपयोग कर OpenSSL :: PKey :: RSA प्रारंभ करने की कोशिश कर रहा हूं, और यह काम नहीं कर रहा है।ओपनएसएसएल - न तो 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

ऐसा लगता है कि आपको वहां क्या मिला है केवल सार्वजनिक कुंजी ही वैध नहीं है। हो सकता है कि आपने किसी दुर्घटना से अतिरिक्त चरित्र को जोड़कर या हटाकर उन्हें किसी बिंदु पर उलझाया हो। आप इस कुंजी का परीक्षण कर सकते हैं और इस पर काम

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 कुंजी युग्म

$ ssh-keygen -t rsa -b 1024 

पैदा करने के लिए linux आदेश चलाकर देखना चाहिए तो मैं करने के लिए OpenSSH शैली सार्वजनिक कुंजी परिवर्तित एक ओपनएसएसएल स्टाइल कुंजी (पीईएम प्रारूप), इसे 'पेम' नामक फ़ाइल में संग्रहीत करता है।

$ 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.