Saltar al contenido

crear un certificado SSL autofirmado de confianza para localhost (para usar con Express / Node)

Solución:

Camino más corto.
Probado en MacOS, pero puede funcionar de manera similar en otros sistemas operativos.

Generar pem

> openssl req -x509 -newkey rsa:2048 -keyout keytmp.pem -out cert.pem -days 365

> openssl rsa -in keytmp.pem -out key.pem

Tu servidor express

const express = require('express')
const app = express()
const https = require('https')
const fs = require('fs')
const port = 3000

app.get("https://foroayuda.es/", (req, res) => {
  res.send('WORKING!')
})

const httpsOptions = {
  key: fs.readFileSync('./key.pem'),
  cert: fs.readFileSync('./cert.pem')
}
const server = https.createServer(httpsOptions, app).listen(port, () => {
  console.log('server running at ' + port)
})
  • Abierto https://localhost:3000 en Google Chrome y verá que no es seguro. ¡Todavía!
  • En Herramientas para desarrolladores> Seguridad> Ver certificado: arrastre la imagen a su escritorio y haga doble clic en ella.
  • Haga clic en ‘Agregar’
  • Encuéntrelo en Keychain Access y haga doble clic en él
  • Expanda ‘Confianza’ y cambie ‘Al usar este certificado’ a ‘Confiar siempre’.
  • Es posible que se le solicite que se autentique.
  • Reinicie su servidor.
  • Actualiza tu navegador.
  • ¡Disfrutar! 🙂

Las respuestas anteriores fueron parciales. He pasado tanto tiempo haciendo que esto funcione, es una locura. Nota para mi yo futuro, esto es lo que debe hacer:

Estoy trabajando en Windows 10, con Chrome 65. Firefox se está comportando bien, solo confirme localhost como una excepción de seguridad y funcionará. Chrome no:

Paso 1. en tu backend, crea una carpeta llamada security. trabajaremos en su interior.

Paso 2. crear un archivo de configuración de solicitud llamado req.cnf con el siguiente contenido (el crédito es para: @Anshul)

req.cnf:

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = Country initials like US, RO, GE
ST = State
L = Location
O = Organization Name
OU = Organizational Unit 
CN = www.localhost.com
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.localhost.com
DNS.2 = localhost.com
DNS.3 = localhost

Una explicación de estos campos está aquí.

Paso 3. navegue hasta la carpeta de seguridad en la terminal y escriba el siguiente comando:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout cert.key -out cert.pem -config req.cnf -sha256

Paso 4. luego fuera de security carpeta, en su aplicación express haga algo como esto: (el crédito es para @Diego Mello)

backend 
 /security
 /server.js

server.js:

const express = require('express')
const app = express()
const https = require('https')
const fs = require('fs')
const port = 3000

app.get("https://foroayuda.es/", (req, res) => {
    res.send("IT'S WORKING!")
})

const httpsOptions = {
    key: fs.readFileSync('./security/cert.key'),
    cert: fs.readFileSync('./security/cert.pem')
}
const server = https.createServer(httpsOptions, app)
    .listen(port, () => {
        console.log('server running at ' + port)
    })

Paso 5. iniciar el servidor, node server.jsy vaya a https: // localhost: 3000.

En este punto tenemos la configuración del servidor. Pero el navegador debería mostrar un mensaje de advertencia.

Necesitamos registrar nuestro certificado autofirmado, como una autoridad certificadora de confianza de CA, en la tienda de certificados de Chrome / Windows. (Chrome también guarda esto en Windows)

Paso 6. abra Dev Tools en Chrome, vaya al panel de Seguridad, luego haga clic en Ver certificado.
ingrese la descripción de la imagen aquí

Paso 7. vaya al panel Detalles, haga clic en Copiar archivo, luego, cuando aparezca el Asistente para exportación de certificados, haga clic en Siguiente como se muestra a continuación:

ir a los detalles - copiar archivo - siguiente en el asistente de exportación

Paso 8. deje la codificación DER, haga clic en siguiente, elija Browse, colóquelo en una carpeta de fácil acceso como Escritorio y asigne un nombre al certificado localhost.cer, then click Save and then Finish.. Debería poder ver su certificado en el escritorio.

Paso 9. Abierto chrome://settings/ insertándolo en el cuadro de URL. Abajo, haga clic en Advanced / Advanced Options, luego desplácese hacia abajo para encontrar Manage Certificates.

elegir administrar certificados

Paso 10. Vaya al panel Entidades emisoras de certificados raíz de confianza y haga clic en importar.

Vaya al panel Autoridades de certificación raíz de confianza y haga clic en importar

Importaremos el localhost.cer certificado que acabamos de exportar en el paso 8.

Paso 11. haga clic en examinar, busque el localhost.cer, deje los valores predeterminados, haga clic en Siguiente varias veces; hasta que aparezca esta advertencia, haga clic en Sí.

confirmar la excepción de seguridad

Paso 12. Cierra todo y reinicia Chrome. Entonces, cuando vaya a https://localhost:3000 deberías ver:
tengo que amar el verde

Puede probar openSSL para generar certificados. Mira esto.

Necesitará un archivo .key y .crt para agregar HTTPS al servidor JS express del nodo. Una vez que genere esto, use este código para agregar HTTPS al servidor.

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

var options = {
    key: fs.readFileSync('/etc/apache2/ssl/server.key'),
    cert: fs.readFileSync('/etc/apache2/ssl/server.crt'),
    requestCert: false,
    rejectUnauthorized: false
};


var app = express();

var server = https.createServer(options, app).listen(3000, function(){
    console.log("server started at port 3000");
});

Esto funciona bien en mi máquina local, así como en el servidor donde lo he implementado. El que tengo en el servidor se compró a goDaddy, pero localhost tenía un certificado autofirmado.

Sin embargo, todos los navegadores arrojaron un error diciendo que la conexión no es confiable, ¿desea continuar? Después de hacer clic en continuar, funcionó bien.

Si alguna vez alguien ha pasado por alto este error con un certificado autofirmado, aclare.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *