2013-01-18 9 views
5

Sto tentando di inizializzare OpenSSL :: PKey :: RSA utilizzando una chiave pubblica e non funziona.OpenSSL - Né la chiave PUB né la chiave PRIV: nested asn1 error

In seguito è la coppia di chiavi:

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

Cosa c'è di sbagliato con public_key che fa le cose a fallire?

+0

Cosa hai usato per generare la coppia di chiavi? – emboss

+5

Ora che Internet conosce la tua chiave privata, ti consiglio di crearne una nuova. Non pubblicherei la tua password in una domanda, vero? – diedthreetimes

risposta

3

Sembra che quello che hai lì dovrebbe funzionare solo la chiave pubblica non è valida. Forse li hai storpiati ad un certo punto aggiungendo o rimuovendo un personaggio extra per sbaglio. È possibile verificare questa chiave fuori e dovrebbe vedere funzionato

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) 

si genera una chiave dalla prima esecuzione del comando di Linux per la generazione di una coppia di chiavi openSSH

$ ssh-keygen -t rsa -b 1024 

Poi mi sono convertito chiave pubblica stile OpenSSH per una chiave di stile OpenSSL (formato PEM), memorizzandola in un file chiamato 'pem'.

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

Questo ha funzionato per me. Grazie :) – khelll

5

seguito da questo collegamento http://skim.la/2012/01/16/rsa-public-key-interoperability-between-ruby-and-android/ ho avuto più successo in questo modo.

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

grazie mille per questa risposta, ha concluso la mia lotta ... –

0

Mi trovavo di fronte allo stesso problema e ho provato molte diverse soluzioni fornite su Internet. Ma il vero problema era con il key che stavo fornendo. La formattazione della chiave dovrebbe essere corretta. Non ci dovrebbero essere caratteri extra o \n , \t.

Spero che questo possa aiutarti. Quindi, controlla di nuovo la tua chiave.

0

Lo stesso giorno in cui ero bloccato con lo stesso problema, la modifica della passphrase potrebbe aiutarti. Quindi verifica la passphrase e modificala nella classe di notifica. Spero che questo possa aiutarti.

Ho cambiato nel file di 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. 
Problemi correlati