Berlinadas

Usar SSL/TLS en Raspberry PI

Seguimos adelante en nuestra aventura de tener un NAS seguro con servidores Apache, WordPress, Owncloud, Samba, Apple Timecapsule, etc, mediante nuestra Raspberry Pi 2.   El objetivo es tener a nuestro alcance todos nuestros datos desde nuestra casa, disponibles en cualquier parte del mundo y desde cualquier dispositivo.   El servidor web que sirve esta página web es el resultado.

Una vez instalado y configurado el site inicial en Apache2 e instalado WordPress, OwnCloud y otras herramientas, he decidido instalar un certificado SSL/TLS de servidor para autentificar el servidor y cifrar las sesiones.   De esta manera mejoramos la seguridad del servidor.

Al terminar la instalación y configuración, podemos ver el “candado” verde en la barra de URL de Chrome, indicando que el navegador acepta la autoridad certificadora que ha generado el certificado (en mi caso es Comodo), que el certificado es válido, que el servidor es el correcto y no otro (autenticación) y que la comunicación con el servidor está siendo cifrada.

BerlinadasSSL

Comprar certificado

Me he decidido por el certificado Positive SSL de Comodo que he comprado por poco menos de 9 USD al año, comercializado por https://www.namecheap.com

Actualización: Me he enterado que existe un certificado gratuito que está siendo soportado por la mayoría de los navegadores y que automatiza el proceso de generación de claves, solicitud del certificado y descarga del mismo. Como ya he comprado e instalado mi certificado de Namecheap (Comodo) por un año, lo seguiré usando y quizás el año que viene instale el gratuito. Lo podéis encontrar aquí: https://letsencrypt.org/  También me han comentado de otra opción gratis que funciona bien: https://www.startssl.com/

PositiveSSL

Validar el dominio

Una vez comprado el certificado, Namecheap te pedirá que verifiques que realmente eres dueño del dominio. Esto se puede hacer de varias maneras. Yo encontré que la manera mas sencilla es la de descargar un fichero de texto provisto por Namecheap en la raíz del servidor Apache. Una vez verificado el dominio, podemos borrar el fichero.

Generar y enviar Certificate Signing Request (CSR)

Una vez verificado el dominio, debemos utilizar openssl para generar la solicitud de certificado (CSR).   Aquí están las instrucciones para generar el CSR:

https://www.namecheap.com/support/knowledgebase/article.aspx/9446/0/apache-opensslmodsslnginx

En resumen, se debe ejecutar openssl para generar el par de llaves PKI privada y pública, así como el correspondiente fichero de solicitud de certificado.   Recuerda: La llave privada no se debe compartir con nadie, es por esto que se llama la llave (o clave) privada.

Para ello debes ejecutar el siguiente comando en tu Raspberry Pi:

openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr

El comando te pedirá ciertos, como tu dirección y más importante, el dominio para el cual quieres generar el certificado, como por ejemplo berlinadas.com. De más está decir que hay que tener mucho cuidado con poner el nombre correcto del dominio, ya que de haber algún error, el certificado no funcionará.

Una vez completado el comando, tendrás dos ficheros en el directorio: server.key (llave privada) y server.csr (solicitud de certificado, que incluye la llave pública).   Debes enviar a Namecheap el contenido del CSR siguiendo estas instrucciones:

https://www.namecheap.com/support/knowledgebase/article.aspx/794/67/how-do-i-activate-an-ssl-certificate

En mi caso, he seleccionado la opción de envío del certificado por email.   En poco tiempo recibirás un email de Namecheap con un adjunto comprimido que contiene el certificado raíz de Comodo y el certificado de servidor.

Activar SSL en Apache2 e instalar el certificado

Para activar SSL/TLS en Apache2 he seguido las siguientes instrucciones, aunque yo lo he hecho con un par de diferencias, ya que el certificado no hay que generarlo sino que ya lo tenemos del paso anterior:

Enable SSL for apache server in 5 minutes

En resumen, se guardan los ficheros de clave privada (lo generamos con openssl en un paso anterior) y el certificado de servidor (que nos ha enviado Namecheap) en un directorio como por ejemplo:

sudo mkdir /etc/apache2/ssl

sudo cp server.key /etc/apache2/ssl

sudo cp server.crt /etc/apache2/ssl

Activamos el módulo SSL de Apache2:

sudo a2enmod ssl

Activamos el sitio SSL creando un enlace simbólico entre sites-availables y sites-enabled:

sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/000-default-ssl.conf

Editamos el fichero del sitio SSL para decirle en donde está el fichero con la clave privada y el fichero con el certificado:

sudo nano /etc/apache2/sites-enabled/000-default-ssl.conf

Y añadimos estas dos líneas:

SSLCertificateFile    /etc/apache2/ssl/server.crt

SSLCertificateKeyFile /etc/apache2/ssl/server.key

Por último, reiniciamos el servidor Apache:

sudo /etc/init.d/apache2 restart

Ya podemos entrar en nuestro sitio mediante el certificado SSL, en mi caso:

https://www.berlinadas.com

Forzar HTTPS

Ahora queremos que todas las conexiones al servidor se hagan mediante HTTPS aunque hagamos la llamada con el protocolo HTTP en la URL.

Para ello, activaremos el módulo de Apache “rewrite”, de tal manera de re-dirigir las sesiones HTTP a HTTPS.  Luego debemos reiniciar Apache.

sudo a2enmod rewrite 
sudo /etc/init.d/apache2 restart

Editamos el fichero de configuración del site de Apache para añadir la redirección.

sudo vi /etc/apache2/sites-enabled/000-default.conf

En mi caso, he añadido lo siguiente, eliminando el document root, ya que todo el contenido se redirige al site SSL:

ServerName www.berlinadas.com
Redirect permanent / https://www.berlinadas.com/

Revisar SSL/TLS

Para terminar, recomiendo hacer una revisión de la configuración SSL del servidor web, de tal manera de localizar cualquier problema de seguridad. Esto lo podemos hacer con una herramienta gratuita que podemos encontrar en https://www.ssllabs.com/ssltest

Por ejemplo, al terminar de hacer las pruebas sobre berlinadas.com me ha dado el siguiente resultado y más abajo hay algunas recomendaciones a seguir:

SSL test

2 pensamientos en “Usar SSL/TLS en Raspberry PI

  1. xaquin

    Lo primero es darte la enhorabuena, Alejandro. Es ésta la primera vez que me encuentro un servidor corriendo en Raspberry que va francamente BIEN.

    Estoy trasteando con una situación parecida pero no consigo un rendimiento convincente, así que estaré atento a tus artículos de ahora en adelante.

    un saludo

    1. Berlin Autor de la entrada

      Muchas gracias Xaquin! Espero que está información te sirva. Estoy preparando un estudio de comparación de coste entre montar un sistema como el que tengo con Raspberry Pi vs contratar almacenamiento en Google.

Deja un comentario

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