Pasando nuestra nube de http a https con OpenSSL

Damos otro paso más en nuestra nube. Seguramente este ya sea el último tutorial, al menos el último dedicado en exclusiva a la nube. Esto no significa que la dejemos de lado, probablemente la usemos como servidor de datos cuando empecemos con el IoT. Pero con este paso creo que ya podemos dejar nuestro equipo trabajando tranquilo y dejar de toquetearlo.

En la entrada de hoy vamos a usar OpenSSL. Este servicio ya lo tenemos instalado, y es el encargado de generar los certificados que se usan por ejemplo en nuestra VPN. Vamos a pasar del protocolo http a https, lo que va a proporcionarnos una capa extra de seguridad. Solo hay una pocas entidades homologadas para firmar y verificar estos certificados, nosotros vamos a generar un certificado autofirmado.

El proceso que usan las entidades certificadoras es en esencia el mismo que vamos a seguir nosotros, pero al no estar generado por una entidad homologada el navegador dará un aviso de seguridad. Informandonos que el sitio es inseguro y es posible que este pirateado…. Esto se resuelve añadiendo una excepción en el navegador.

Podríamos usar Let’s Encrypt, un servicio de certificados gratuito, pero no permite trabajar con servicios de DNS Dinámicos como noip, DinDNS y similares. Por eso tenemos que usar un certificado autofirmado.

 

Creando el certificado

Lo primero es generar la llave del servidor, así que nos conectamos vía SSH, cambiamos a root y nos vamos al home con cd. Yo he creado una carpeta para las claves del servidor en mi home, mkdir ClavesServidor, aunque no es necesario. Creas la clave con el comando openssl genrsa -out servidor.key 2048. En mi caso uso una clave de 2.048 bits, puedes hacerla de 1.024 o 4.096, solo tienes que cambiarlo en la instrucción anterior.

Ahora vamos a por la petición de certificado. Esto es una especie de plantilla para generar el certificado. Para esto vamos a necesitar proporcionar algunos datos que nos ira preguntado, código de pais (ES), provincia, ciudad, compañia, etc. Lanza el siguiente comando openssl req -new -key servidor.key -out servidor.csr y contesta a las preguntas que te irá haciendo, no son muchas. La pregunta más importante es la de Common Name, esta es la que define la dirección de la web. Si ponemos direccion.com el certificado solo servirá para direccion.com, no para www.direccion.com ni para direccion.es ni para nada que no sea direccion.com.

Pues ya tenemos lo que necesitamos, la clave del servidor y la petición de certificado. Para poder crear el certificado del servidor lanza el siguiente comando openssl x509 -req -days 365 -in servidor.csr -signkey servidor.key -out servidor.crt. Cambia 365 por los días que quieras mantener el certificado activo. Y por último damos permisos a los archivos con chmod 600 servidor.*.

 

Configurar el servidor

Lo primero es asegurarnos que tenemos el módulo de ssl activo en apache2 con el comando a2enmod ssl. Cuando actives el módulo ssl te dirá que tienes que reinciar apache, pero esperaremos a tenerlo todo configurado.

Ahora toca decirle a apache que use la conexión ssl, es decir la conexión segura por el puerto 443 y no el puerto 80 del html normal. Vamos a crear una copia del archivo original de configuración con el comando cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl_orig.conf. Y luego lo editamos, con nano /etc/apache2/sites-available/default-ssl.conf Aquí solo hay que añadir unas pocas líneas y editar un par más. Una de las primeras etiquetas es esta <VirtualHost _default_:443>, justo debajo añade la línea ServerName nombre.detu.sitio:443 (cambia nombre.detu.sitio por tu dirección). Y debajo de esto añade:

<IfModule mod_headers.c>
                Header always set Strict-Transport-Security “max-age=15552000; includeSubDomains”
</IfModule>

Y un poco más abajo te encontraras estas 2 lineas “SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem” y “SSLCertificateKeyFile /etc/ssl/certs/ssl-cert-snakeoil.key”. Simplemente cambia la ruta al certificado, en mi caso /root/ClavesServidor/servidor.crt o servidor.key. Guarda los cambios y sal del editor.

Con esto ya tienes el servidor https casi listo para funcionar. Solo hacen falta un par más de cosas. Activar el modulo de cabeceras (lo habiamos postpueto hasta terminar con la configuración de apache) con el comando a2enmod headers. Reinicia el servidor con service apache2 restart y listo. Ya tienes el servidor funcionando.

 

Últimos ajustes

Si has ido siguiendo los tutoriales seguramente tengas el puerto redireccionado al 80 de tu ip local. Tendrás que cambiarlo al 443. Los servicios que tengas sincronizados se verán afectados por este cambio en la configuración, deberás volver a reconfigurarlos.

Para poder acceder a tu servidor ves al navegador y prueba con https://nombre.detu.sitio/. Como te comentaba al principio, al tratarse de un certificado autofirmado, el navegador te mostrará un mensaje diciendo que el certificado del servidor no es de confianza y que no deberías entrar al sitio, que es inseguro, etc… Pulsa sobre “Entiendo los riesgos” o algo similar y dile que quieres añadir una excepción, de esta forma no te lo preguntará cada vez que intentes acceder. Este aviso te saldrá en todos los navegadores que abras, en cada uno de ellos tendrás que añadir la excepción.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies