Nœud.js https pem erreur: routines:PEM lire la bio:pas de ligne de départ

je joue avec le formulaire de connexion en ce moment avec le noeud.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 j'ai eu des erreurs pour exécuter le serveur de noeuds.js

Voici mon serveur.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

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 suis pas exactement sûr de ce que signifie l'erreur comme mon fichier de cryptage est .pem fichier déjà, donc toute aide serait beaucoup apprécier.

Merci

24
demandé sur xbd 2014-03-23 02:08:56

7 réponses

vous utilisez probablement le mauvais fichier de certificat, ce que vous devez faire est de générer un certificat auto signé qui peut être fait 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

alors utilisez le serveur.crt

   var options = {
      key: fs.readFileSync('./csr.pem', 'utf8'),
      cert: fs.readFileSync('./server.crt', 'utf8')
   };
59
répondu Hassaan 2018-06-20 13:31:51

était confronté au même problème dans mon cas j'ai changé le paramètre d'option de cert En pfx & supprimé l'encodage 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
};
6
répondu Mayank Kumar 2016-04-28 05:51:35

je suppose 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, réessayez avec npm install . En fait, cela a résolu mon problème.

3
répondu Avanthika 2018-02-17 11:04:38

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

Ouvrir Un Terminal

  1. openssl req -newkey rsa:2048 -nouvelle -nœuds -keyout clé.pem -out de la rse.pem

  2. openssl x509 -req -days 365 -en matière de rse.la clé pem-signkey.pem -out server.crt

maintenant, utilisez le serveur.crt et de la clé.fichier pem

app.js ou d'un serveur.fichier 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 le certificat n'est pas approuvé. Vous pouvez visualiser l'image dans le fichier image.

enter image description here

3
répondu VIKAS KOHLI 2018-03-12 12:11:17

si vous utilisez windows, vous devez vous assurer que le fichier de certificat csr.pem et de la clé.pem n'a pas de fin de ligne de style unix. Openssl générera les fichiers clés avec les fins de ligne de style unix. Vous pouvez convertir ces fichiers au format dos en utilisant un utilitaire comme unix2dos ou un éditeur de texte comme notepad++

0
répondu neesh 2014-05-23 16:35:16

Générer la clé privée et le certificat du serveur avec la date d'expiration spécifique ou avec le temps d'expiration infini(XXX) et auto-signer.

$ openssl req-x509-sha256-newkey rsa: 2048-keyout key.PEM-out cert.PEM-days XXX!--1-->

$ entrer une phrase de passe de clé privée...`

alors ça va marcher!

0
répondu Robel Sharma 2015-11-30 17:57:42

Si vous vous connectez à l'

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

vous pourriez remarquer qu'il y a des caractères invalides en raison d'un codage inadéquat.

0
répondu F.O.O 2016-04-04 15:24:50