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.js
y 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.
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:
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
.
Paso 10. Vaya al panel Entidades emisoras de certificados 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í.
Paso 12. Cierra todo y reinicia Chrome. Entonces, cuando vaya a https://localhost:3000
deberías ver:
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.