web-dev-qa-db-fra.com

Node.js https erreur pem: routines: PEM_read_bio: aucune ligne de départ

Je déconne avec le formulaire de connexion en ce moment avec node.js, j’ai essayé de créer une clé pem et csr en utilisant

openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem

Cependant, des erreurs se sont produites lors de l'exécution du noeud server.js

Voici mon server.js

var http = require('http'),
    express = require('express'),
UserServer = require('./lib/user-server');

var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync('./key.pem', 'utf8'),
  cert: fs.readFileSync('./csr.pem', 'utf8')
};

var app = express();

app.configure(function(){
  app.use(express.bodyParser());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

var httpserver = http.createServer(app).listen('3004', '127.0.0.1');
var https_server = https.createServer(options, app).listen('3005', '127.0.0.1');
UserServer.listen(https_server);

Voici l'erreur

crypto.js:104
  if (options.cert) c.context.setCert(options.cert);
                          ^
Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
    at Object.exports.createCredentials (crypto.js:104:31)
    at Server (tls.js:1107:28)
    at new Server (https.js:35:14)
    at Object.exports.createServer (https.js:54:10)

J'ai essayé de courir

openssl x509 -text -inform DER -in key.pem

Il donne

unable to load certificate
140735208206812:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1319:
140735208206812:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=X509

Je ne sais pas exactement ce que signifie l'erreur car mon fichier de chiffrement est déjà un fichier .pem; toute aide serait donc la bienvenue.

Merci

43
xbd

Vous utilisez probablement le mauvais fichier de certificat, vous devez générer un certificat auto-signé, comme suit:

openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem
openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out server.crt

puis utilisez le server.crt

   var options = {
      key: fs.readFileSync('./csr.pem', 'utf8'),
      cert: fs.readFileSync('./server.crt', 'utf8')
   };
73
Hassaan

J'ai supprimé cette erreur en écrivant le code suivant

Terminal ouvert

  1. openssl req -newkey rsa: 2048 -nouveau -nodes -keyout key.pem -out csr.pem

  2. openssl x509 -req -days 365 -in csr.pem -signkey clé.pem -out serveur.crt

Maintenant, utilisez les fichiers server.crt et key.pem

fichier app.js ou server.js

var https = require('https');
var https_options = {
  key: fs.readFileSync('key.pem', 'utf8'),
  cert: fs.readFileSync('server.crt', 'utf8')
};

var server = https.createServer(https_options, app).listen(PORT);
console.log('HTTPS Server listening on %s:%s', Host, PORT);

Cela fonctionne mais le certificat n'est pas approuvé. Vous pouvez afficher l'image dans un fichier image.

enter image description here

9
VIKAS KOHLI

A été confronté au même problème Dans mon cas, j'ai changé le paramètre d'option de cert à pfx et supprimé le codage utf8.

avant:

var options = {
    hostname : 'localhost',
    path : '/',
    method : 'POST',
    cert: fs.readFileSync(testCert, 'utf8'),
    passphrase:passphrase,
    agent:false,
    rejectUnauthorized:false
};

après:

var options = {
    hostname : 'localhost',
    path : '/',
    method : 'POST',
    pfx: fs.readFileSync(testCert),
    passphrase:passphrase,
    agent:false,
    rejectUnauthorized:false
};
8
Mayank Kumar

J'imagine que c'est parce que votre certificat de nodejs a expiré. Tapez cette ligne:
npm set registry http://registry.npmjs.org/
et après cela, essayez à nouveau avec npm install. Cela a effectivement résolu mon problème.

2
Avanthika

Pour moi, le problème était que j'avais la clé et le certificat échangés.

var options = {
   key: fs.readFileSync('/etc/letsencrypt/live/mysite.com/privkey.pem'),
   cert: fs.readFileSync('/etc/letsencrypt/live/mysite.com/fullchain.pem'),
   ca: fs.readFileSync('/etc/letsencrypt/live/mysite.com/chain.pem')
};
2
Kyle Coots

En fait, je viens d'avoir ce même message d'erreur.

Le problème était que j'avais key et cert fichiers échangés dans l'objet de configuration.

0
H. Green

Si vous vous connectez le

var options = {
  key: fs.readFileSync('./key.pem', 'utf8'),
  cert: fs.readFileSync('./csr.pem', 'utf8')
};

Vous remarquerez peut-être que des caractères non valides sont dus à un codage incorrect.

0
F.O.O

Si vous utilisez Windows, vous devez vous assurer que les fichiers de certificat csr.pem et key.pem ne comportent pas de fin de ligne de style unix. Openssl générera les fichiers de clés avec des fins de ligne de style unix. Vous pouvez convertir ces fichiers au format dos en utilisant un utilitaire tel que unix2dos ou un éditeur de texte tel que notepad ++

0
neesh