Quelles sont les causes du “Ni PUB clés ni PRIV clé:: niché asn1 erreur lors de la construction d'une clé publique en ruby?
Lors de la construction d'une clé publique à l'aide d'OpenSSL::PKey::module RSA en passant un .fichier pem, ce qui est la cause de réponse:
OpenSSL::PKey::RSAError: Neither PUB key nor PRIV key:: nested asn1 error
from /Users/Matt/projects/placepop/lib/apn.rb:48:in `initialize'
from /Users/Matt/projects/placepop/lib/apn.rb:48:in `new'
from /Users/Matt/projects/placepop/lib/apn.rb:48:in `open'
from (irb):1
Voici la source:
cert = File.join(rails_root, 'config', 'apns', 'sandbox-cert.pem')
APN_CONFIG = { :delivery => {
:host => 'gateway.sandbox.push.apple.com',
:cert => cert,
:passphrase => "",
:port => 2195 },
:feedback => {
:host => 'feedback.sandbox.push.apple.com',
:port => 2196,
:passphrase => "",
:cert => cert} }
options = APN_CONFIG[:delivery].merge(options)
cert = File.read(options[:cert])
ctx = OpenSSL::SSL::SSLContext.new
ctx.key = OpenSSL::PKey::RSA.new(cert, options[:passphrase])
ctx.cert = OpenSSL::X509::Certificate.new(cert)
sock = TCPSocket.new(options[:host], options[:port])
ssl = OpenSSL::SSL::SSLSocket.new(sock, ctx)
ssl.sync = true
ssl.connect
Vous devez vous connecter pour publier un commentaire.
Un fichier pem n'est pas une clé publique, il est encodée en base64, certificat X509 qui contient, parmi ses nombreux domaines, une clé publique. Je ne sais pas Ruby, ou OpenSSL ruby module, mais je voudrais chercher une fonction qui lit dans PEM fichiers et les sorties d'un certificat X509, puis une autre fonction pour extraire la clé publique du certificat.
\n
) dans une variable ENV, puis assurez-vous d'utiliser le.gsub
suggestion dans le lien.J'ai eu le même problème et qu'il avait une cause différente. Maintenant, devinez quoi 🙂
...
La putain de mot de passe était mauvais 🙁
Recherché 3 jours pour que la "solution". Pourrait avoir été un "Désolé mec, c'est le mauvais mot de passe!" au lieu de "nested asn1 d'erreur" à mon humble avis, mais de toute façon, peut-être que cela aidera quelqu'un.
Si vous utilisez
dotenv
par exemple, vous devez entourer la valeur avec"
et ont\n
pour les retours à la ligne.J'ai eu un problème similaire, mais pour moi, je n'étais pas la création d'un fichier pem pour mon id_rsa.fichier pub en premier lieu. Pour moi, j'avais besoin de créer un fichier pem de ma clé publique existante:
Puis j'ai copié que OpenSSL chaîne dans mon fichier de test où il a été utilisé. Elle ressemblait à ça en fin de compte pour moi.
Après que la méthode cessé de jeter de l'erreur.
Mon problème est que l'
OpenSSL::PKey::RSA.new()
veut le fichier contenu et non pas le chemin d'accès au fichier. Ainsi, en utilisant quelque chose comme cela fonctionnait:L'OP était déjà le faire, mais j'espère que cela aidera quelqu'un. Car elle suppose que c'est le contenu du fichier et non pas un chemin d'accès au fichier, même si vous fournissez un chemin d'accès incorrect, vous ne serez pas averti.
Assurez-vous que votre
.pem
les fichiers sont au format.public_key_file.pem:
private_key_file.pem:
Dans mon cas, la fonction attend une clé privée alors qu'il y avait un certificat stocké dans une variable. L'échange de l'entrée avec une clé privée correction de l'erreur.
Je suis avec Webrick, dans mes tests, et en essayant de les instancier ma clé privée avec le mauvais de la classe m'a conduit à ce message d'erreur:
Mais ce travaillé:
Facepalm