viernes, 8 de mayo de 2020

SSL y Https fácil y rápido sin Wordpress ni cPanel

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:
  1. 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.
  2. 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.
  3. 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.
  4. 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');
          
      
    Varias cosas: hemos creado un servidor tanto http como un servidor https al que le hemos pasado nuestra app de express importada de "/server.js". Al servidor https le pasamos como primer parámetro nuestros archivos descargados y guardados, en mi caso, en la carpeta SSL. A nuestro servidor http que escuchará en el puerto 80 le diremos que haga una redirección 301 a nuestro dominio con "https".
  5. 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.

    Un saludo y espero que les sirva.

No hay comentarios:

Publicar un comentario