2014-06-17 3 views
14

Ich habe P12-Datei von Apple und versuchte, es zu konvertieren Datei mit folgendem Befehl .PEM:Erste OpenSSL :: X509 :: CertificateError verschachtelte asn1 Fehler auf Ruby-

openssl pkcs12 -in cert.p12 -out apple_push_notification_development.pem -nodes -clcerts 

Wenn die neue OpenSSL erstellen versuchen: : X509 :: Zertifikatsobjekt mit

OpenSSL::X509::Certificate.new(File.read('apple_push_notification_development.pem')) 

bekomme ich folgende Fehlermeldung:

OpenSSL::X509::CertificateError: nested asn1 error 
    from (irb):9:in `initialize' 
    from (irb):9:in `new' 
    ... 

Habe ich einige tun Ding falsch? Feststecken, bitte helfen. Dank

Antwort

7

Schätzen Sie es ist nicht Ihr exaktes Szenario, aber ich habe versucht, eine PEM-Datei (PKCS7) in meiner Instanz zu lesen. OpenSSL CLI würde es gut dekodieren, aber Ruby warf immer den gleichen geschachtelten asn1 Fehler auf, den Sie beschreiben, als ich versuchte, es in ein Objekt zu laden.

In meinem Fall brauchte es eine neue Zeile, zum Beispiel '\ n' am Ende der PEM-Datei, um es zu akzeptieren.

Ich habe es nur ausgearbeitet, wenn ich ein leeres Objekt erstellt und die generierte PEM-Ausgabe mit der Datei verglichen habe, die ich laden wollte.

So mit einer X509-cert vielleicht versuchen:

cert = OpenSSL::X509::Certificate.new 
cert.to_pem 
=> "-----BEGIN CERTIFICATE-----\nMCUwGwIAMAMGAQAwADAEHwAfADAAMAgwAwYBAAMBADADBgEAAwEA\n-----END CERTIFICATE-----\n" 

Und vergleichen Sie es mit Ihrer PEM-Datei

Wie Sie es mit einer neuen Zeile beendet sehen und dass in der Datei fehlt, dass ich versuchen zu importieren.

7

Ich hatte das gleiche Problem und in meinem Fall musste ich Dateiinhalt mit Base64 entschlüsseln.

require 'openssl' 
require 'base64' 

encoded_content = File.read('apple_push_notification_development.pem') 
decoded_content = Base64.decode64(encoded_content) 
certificate = OpenSSL::X509::Certificate.new(decoded_content) 
3

Dies kann auch passieren, wenn Sie vergessen, neu generierte Zertifikate zu signieren. Ich wollte selbstsigniertes Zertifikat verwenden, habe aber das Signieren vergessen.

# Create key 
key = OpenSSL::PKey::RSA.new(2048) 
open("key.pem", "w") do |io| io.write(key.to_pem) end 

# Generate certificate 
name = OpenSSL::X509::Name.parse("CN=example.com/C=EE") 
cert = OpenSSL::X509::Certificate.new 
cert.version  = 2 
cert.serial  = 0 
cert.not_before = Time.now 
cert.not_after = cert.not_before + 1 * 365 * 24 * 60 * 60 # 1 year validity 
cert.public_key = key.public_key 
cert.subject  = name 

und dieser Teil des Codes ist, was ich verpasst:

cert.issuer = name 
cert.sign key, OpenSSL::Digest::SHA1.new 
open "cert.pem", 'w' do |io| io.write cert.to_pem end 
Verwandte Themen