Getting OpenSSL:: X509:: CertificateError embested asn1 error on Ruby
Je l'ai fait .P12 fichier à partir D'Apple et essayé de le convertir en .pem fichier avec la commande suivante:
openssl pkcs12 -in cert.p12 -out apple_push_notification_development.pem -nodes -clcerts
lors de la création d'un nouvel objet OpenSSL:: X509:: Certificate avec
OpenSSL::X509::Certificate.new(File.read('apple_push_notification_development.pem'))
j'obtiens l'erreur suivante:
OpenSSL::X509::CertificateError: nested asn1 error
from (irb):9:in `initialize'
from (irb):9:in `new'
...
ai-je Fait quelque chose de mal ? D'être coincé, s'il vous plaît aider. Merci
3 réponses
J'apprécie que ce ne soit pas exactement le même scénario que vous, mais j'ai essayé de lire dans un fichier PEM (PKCS7) dans mon cas. OpenSSL CLI le décoderait très bien, mais ruby a continué à lancer la même erreur imbriquée que vous décrivez quand j'ai essayé de le charger dans un objet.
dans mon cas, il lui fallait une nouvelle ligne, c'est-à-dire '\n' à la fin du fichier PEM pour l'accepter.
Je n'ai trouvé la solution que lorsque j'ai créé un objet vide et comparé la sortie PEM générée au fichier que j'étais essaie de charger.
donc avec un x509 cert peut-être essayer:
cert = OpenSSL::X509::Certificate.new
cert.to_pem
=> "-----BEGIN CERTIFICATE-----\nMCUwGwIAMAMGAQAwADAEHwAfADAAMAgwAwYBAAMBADADBgEAAwEA\n-----END CERTIFICATE-----\n"
Et de le comparer à votre fichier PEM
comme vous pouvez le voir, il est terminé avec une nouvelle ligne et qui manquait dans le fichier que j'essayais d'importer.
j'ai eu le même problème et je suis mon cas j'ai dû décoder le contenu du fichier avec Base64.
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)
cela peut aussi se produire lorsque vous oubliez de signer le certificat nouvellement généré. Je voulais utiliser le certificat auto-signé mais j'ai oublié de signer la partie.
# 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
et cette partie de code est ce que j'ai raté:
cert.issuer = name
cert.sign key, OpenSSL::Digest::SHA1.new
open "cert.pem", 'w' do |io| io.write cert.to_pem end