Aprende a obtener un certificado SSL, instalarlo y configurarlo para
cualquier aplicación en Nodejs.
Puede ser un auténtico dolor de cabeza y una pérdida de tiempo considerable conseguir que nuestro sitio web luzca con el preciado candadito verde que confirma que nuestra web utiliza el protocolo SSL que asegura la encriptación de la información. En este artículo he querido ofrecer una forma de conseguir https para nuestra web de una forma rápida, sencilla y gratis, así que... al turrón!
Primero debemos estar seguros de que nuestra aplicación está corriendo en el puerto 80 pues será necesario posteriormente para que se pueda acceder a los archivos que posteriormente incluiremos en nuestro proyecto. Una vez sabemos que cumplimos con este requisito seguiremos los siguientes pasos:-
Dirígete a "https://sslforfree.com". Ingresa tu nombre de dominio. No es necesario introducir "www" pues lo añadirá
por nosotros.
Clicaremos en "Create Free SSL Certificate". Se nos abrirá una página y deberemos elegir la opción "Manual Verification". Más abajo clicaremos en "Manually Verify Domain" y descargaremos los dos archivos que nos pide. - Ahora debemos incluir estos dos archivos en nuestro proyecto. Estos archivos deben ser accesibles desde el cliente por lo que deben estar en nuestra carpeta pública, generalmente "public" o "static". En la raíz de ésta carpeta crearemos una nueva carpeta cuyo nombre debe ser ".well-known". No olvides el punto inicial. Si tienes problemas para crear esta carpeta en Windows hazlo directamente en tu editor de código. Es posible que esta carpeta no sea visible desde el explorador de archivos si no tienes la opción activada de ver las carpetas ocultas. Dentro de ".well-known" crearemos una nueva carpeta llamada "acme-challenge" que será donde incluyamos los archivos descargados. Si todo lo hemos hecho bien probaremos los enlaces que nos muestra "SSL For Free" un poco más abajo. Al clicar debemos obtener una respuesta del servidor con los archivos. Si nos responde un error del tipo "Cannot GET /.well-known/acme-challenge/..." deberemos revisar que hayamos colocado bien los archivos y que sean accesibles.
- Si hemos superado el paso anterior ya podemos descargar el certificado dándole al botón "Download SSL Certificate". Ésto nos descargará un .zip con 3 archivos: "private.key", "certificate.crt" y "ca_bundle.crt". Descomprimiremos el zip y los archivos los guardaremos en una carpeta en la raíz de nuestro proyecto (fuera de nuestra carpeta pública) y la llamaremos SSL, por ejemplo. Recuerda incluir esta carpeta en tu .gitignore si subes el proyecto a algún repositorio público como github.
-
Ahora nos queda configurar nuestra app para que el servidor acceda a nuestros
certificados.
const app = require('./server'); const http = require ('http'); const https = require ('https'); const fs = require('fs'); const path = require('path'); const private_key = fs.readFileSync(path.join(__dirname, './SSL/private.key')); const certificate = fs.readFileSync(path.join(__dirname, './SSL/certificate.crt'); const ca_bundle = fs.readFileSync(path.join(__dirname, './SSL/ca_bundle.crt')); https.createServer({ key: private_key, cert: certificate, ca: ca_bundle }, app) .listen(443, () => console.log('Server listening on port 443')); http.createServer((req, res) => { res.writeHead(301, { "Location": "https://" + req.headers['host'] + req.url}); res.end(); }) .listen(80, () => console.log('Server listening on port 80');
- No olvidemos abrir nuestro puerto 443 desde nuestro hosting para que se pueda acceder desde Internet. Si hemos hecho las cosas bien nuestra aplicación ya debería aparecer como segura. El certificado tiene 3 meses de duración. Antes de que expire bastará con volver a generar los archivos y sustituirlos por los nuevos. De nuevo totalmente gratis.
No hay comentarios:
Publicar un comentario