2013-01-18 19 views
5

Açık anahtar kullanarak OpenSSL :: PKey :: RSA'yı başlatmaya çalışıyorum ve çalışmıyor.OpenSSL - Ne PUB anahtarı ne de PRIV anahtarı :: iç içe asn1 hatası

anahtar çifti ise aşağıdadır:

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

başarısız olmasına neden olan şeyleri public_key nesi var?

+0

dosyasında app/jobs/notification_job.rb değişti? – emboss

+5

Artık tüm internet özel anahtarınızı biliyor, yeni bir tane oluşturmanızı öneriyorum. Şifreni bir soruya yollamaz mıydın? – diedthreetimes

cevap

3

Orada ne varmış gibi görünüyor sadece ortak anahtarın kendisi geçerli değil çalışır. Belki bir noktada kazara ekstra bir karakter ekleyerek veya çıkararak onları bir noktada karıştırmışsınızdır. Sen Sonra OpenSSH tarzı genel anahtarı dönüştürülen dışarı bu anahtarı test edebilirsiniz ve ilk bir OpenSSH anahtar çifti

$ ssh-keygen -t rsa -b 1024 

üretmek için linux komutunu çalıştırarak anahtarımı oluşturulan

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) 

işe görmelisiniz OpenSSL stil anahtarı (PEM formatı), 'pem' adı verilen bir dosyada saklar.

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

Bu benim için çalıştı. Teşekkürler :) – khelll

5

Bu bağlantıyı takip eden http://skim.la/2012/01/16/rsa-public-key-interoperability-between-ruby-and-android/ Bu yoldan daha fazla başarı elde ettim.

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

Bu cevap için teşekkürler, mücadelem bitti ... –

0

Aynı sorunla karşı karşıya kaldım ve internette verilen çok farklı çözümler denedim. Ancak asıl sorun, sağladığım key ile oldu. Anahtarın formatı uygun olmalıdır. Fazladan bir karakter veya \n , \t olmamalıdır.

Umarım bu size yardımcı olabilir. Yani, lütfen anahtarınızı bir kez daha kontrol edin.

0

Aynı gün, aynı sorunla takıldım, değişen parolalar size yardımcı olabilir. Bu yüzden, şifrenizi doğrulayın ve bildirim sınıfında değiştirin. Umarım bu size yardımcı olabilir.

Sana anahtar çiftini oluşturmak için kullandı Ne

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. 
İlgili konular