node.js - pem_read_bio - node js express https certificate
Node.js https pem error: rutinas: PEM_read_bio: no start line (6)
Si está utilizando Windows, debe asegurarse de que el archivo de certificado csr.pem y key.pem no tengan terminaciones de línea estilo Unix. Openssl generará los archivos de clave con terminaciones de línea de estilo Unix. Puede convertir estos archivos al formato dos con una utilidad como unix2dos o un editor de texto como notepad ++
Estoy jugando con el formulario de inicio de sesión ahora con node.js, intenté crear una clave de pem y csr usando
openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem
Sin embargo, he estado recibiendo errores para ejecutar el nodo server.js
Aquí está mi 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);
Aquí está el error
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)
Intenté correr
openssl x509 -text -inform DER -in key.pem
Da
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
No estoy exactamente seguro de lo que significa el error, ya que mi archivo de cifrado ya es archivo .pem, por lo que cualquier ayuda sería muy apreciada.
Gracias
Probablemente esté utilizando el archivo de certificado incorrecto, lo que debe hacer es generar un certificado autofirmado que se puede realizar de la siguiente manera
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
luego usa el servidor.crt
var options = {
key: fs.readFileSync(''./key.pem'', ''utf8''),
cert: fs.readFileSync(''./server.crt'', ''utf8'')
};
Genere la clave privada y el certificado del servidor con una fecha de vencimiento específica o con un tiempo de caducidad infinito (XXX) y autocríbalo.
$ openssl req -x509 -sha256 -newkey rsa: 2048 -keyout key.pem -out cert.pem -days XXX
$ Ingrese una contraseña de clave privada ... `
¡Entonces funcionará!
Si registra el
var options = {
key: fs.readFileSync(''./key.pem'', ''utf8''),
cert: fs.readFileSync(''./csr.pem'', ''utf8'')
};
Es posible que observe que hay caracteres no válidos debido a una codificación incorrecta.
Estaba enfrentando el mismo problema En mi caso cambié el parámetro de opción de cert a pfx y eliminé la codificación utf8.
antes de:
var options = {
hostname : ''localhost'',
path : ''/'',
method : ''POST'',
cert: fs.readFileSync(testCert, ''utf8''),
passphrase:passphrase,
agent:false,
rejectUnauthorized:false
};
después:
var options = {
hostname : ''localhost'',
path : ''/'',
method : ''POST'',
pfx: fs.readFileSync(testCert),
passphrase:passphrase,
agent:false,
rejectUnauthorized:false
};
Supongo que esto se debe a que su certificado nodejs ha expirado. Escriba this line npm set registry http://registry.npmjs.org/
y luego intente de nuevo con npm install. Esto realmente resolvió mi problema.