Instalar SSL con Lets Encrypt en Ubuntu con Apache

  • Por
Crear y configurar los certificados SSL de Lets Encrypt, de manera gratuita, para tener tu servidor Apache sobre Ubuntu con el dominio disponible bajo https://.

El objetivo de este artículo es configurar un servidor Linux en el que tenemos Apache para que sirva las páginas de un dominio con SSL, es decir, https:// en lugar de http://.

Realmente este proceso es una variación del que hemos realizado en otra ocasión, pero en aquella vez para un sistema Linux con Debian. Hay unos mínimos cambios que vamos a comentar y nos apoyaremos en el artículo anterior para complementar el presente.

Todo lo haremos con la entidad certificadora Let’s Encrypt, que nos proporciona los certificados SSL de manera gratuita y en un proceso que resulta muy sencillo de realizar, incluso con pocos conocimientos de administración de sistemas. Te ayudaremos en este artículo.

Instalar Certbot

Lo primero que vamos a tener que hacer es instalar el programa Certbot para Ubuntu, que se encarga de realizar las tareas de creación del certificado en el servidor. Tenemos la versión 16.04 de Ubuntu en el servidor y los pasos los encuentras en este artículo y también en la documentación oficial en el sitio web:

https://certbot.eff.org/

El software que necesitamos está en los repositorios oficiales, lo instalamos con este comando:

apt-get install python-letsencrypt-apache
Nota: Ya sabes, tendrás que conectar con el servidor por SSH como usuario root. Si no lo eres, tendrás que colocar "sudo" delante del comando para que funcione.

Esto nos instala el comando "letsencrypt" en el sistema, que usaremos a continuación para los siguientes pasos de este tutorial.

Instalación de los certificados y configuración de Apache automática

En la ayuda de Certbot, en el sitio web mencionado antes, se encuentra un comando que realiza la instalación de los certificados y la configuración automática. A decir verdad en este caso ni lo he probado, porque prefiro ir paso por paso realizando las configuraciones en Apache de manera manual.

Por si te animas a probarlo, el comando es:

letsencrypt --apache

Instalación del certificado y configuración de Apache manual

Entonces vamos a solicitar a Let's Encrypt que realice la creación de los certificados y luego nosotros configuraremos Apache de manera manual.

Los pasos serán los siguientes para crear el certificado. Primero tienes que detener Apache, si es que estuviera funcionando.

service apache2 stop

Ahora ejecutamos el comando para la creación del certificado. Será algo como esto:

letsencrypt certonly --standalone -d example.com

Algo muy típico es que quieras usar el mismo certificado para varios subdominios, por ejemplo example.com y www.example.com.

letsencrypt certonly --standalone -d example.com -d www.example.com
Nota: Para tu información en el anterior comando "certonly" crea el certificado solamente, en vez de configurar el servidor web. Por su parte --standalone crea un servidor automáticamente en tu sistema, temporalmente mientras se crea el certificado, para realizar autenticación con Let's Encrypt. La opción -d como has visto, sirve para indicar el dominio o dominios del certificado, que debe de estar instalado en el servidor.

Ejecutando el comando nos saldrá una especie de asistente interactivo de línea de comandos que nos pedirá nuestro email para notificaciones de renovación y que aceptemos las condiciones del servicio.

Al terminar el proceso verás una información importante, que es la ruta donde se encuentran los certificados que acaba de crear.

Una vez terminado podrías tranquilamente volver a activar Apache:

service apache2 start

Configurar Apache para SSL

Aquí tenemos que hacer una serie de pasos que consisten en activar en Apache el servicio de SSL, algo que se hace desde la configuración del Virtual Host.

Tendrás que entrar en la carpeta "/etc/apache2/sites-enabled" y encontrar el archivo de configuración de tu Virtual Host para editarlo. Generalmente tiene el nombre de tu dominio, algo como "example.com.conf".

vim example.com.conf
Nota: Obivamente, puedes usar cualquie editor de texto, quizás es más sencillo el editor "nano" para las personas que empiezan.

Ahora tienes que duplicar todo el contenido del Virtual Host que tienes para el puerto 80, colocando el mismo código, pero cambiando 80 por el 443. Es decir, localizas la etiqueta:

<VirtualHost *:80>

Y el final de la etiqueta:

</VirtualHost>

Y copias esa etiqueta y todo su contenido, cambiando la etiqueta de inicio por esta otra:

<VirtualHost *:443>

Ahora le tienes que agregar las líneas necesarias para indicar dónde está el certificado que acabas de generar en el paso anterior. El código será algo como este:

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

Tendrás que colocar tu nombre de dominio y estar atento que las rutas sean las correctas. Viste las rutas en el final de la creación del certificado, como salida del comando "letsencrypt".

Otras cosas que podrías necesitar

Esto es lo básico para conseguir configurar el SSL sobre Apache. Luego podrías reiniciar el propio Apache para que los cambios se apliquen. Sin embargo hay otras cosas que podrías necesitar. No voy a extenderme mucho sobre estas cosas, porque ya las explicamos en el artículo sobre la instalación de un certificado Let's Encrypt en un servidor Debian. Solo lo voy a enumerar, recomendando accede al anterior artículo para más información.

  • Si te sale el error "Invalid command 'SSLEngine'" entonces es que no tienes activado el módulo Apache para SSL. Tienes que activarlo con "a2enmod ssl"
  • Podrías redirigir todo el tráfico de http (normal) a https (seguro) mediante una configuración en el virtual host para el puerto 80. Para ello agregas simplemente la línea "Redirect permanent / https://example.com/" en la pare del puerto "VirtualHost *:80"
  • El comando "apache2ctl -t" te puede ayudar para detectar posibles errores de sintaxis en la configuración del archivo de virtualhost, es muy apropiado ejecutarlo antes de reiniciar Apache, así nos aseguramos que cuando realicemos ese reinicio todo funcionará correctamente.

Teniendo en cuenta esas consideraciones creo que estás en el momento adecuado de reiniciar Apache:

service apache2 restart

Y por último acceder a tu dominio por https:// para comprobar si el certificado está correctamente instalado.

Si te da algún error quizás tengas que abrir la consola de desarrolladores para ver si el propio navegador te ayuda a indentificarlo. A veces en la programación de tu sitio estás invocando todavía archivos de scripts con http:// (sin la "s") y por ello no te sale el mensaje de "Servidor seguro". Eso también lo hemos detallado en el artículo de Configuración de SSL para Debian.

Suerte en el proceso! seguro que te va bien y en pocos minutos tienes configurado tu dominio con SSL y disponible por https://, en tu servidor Ubuntu.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Oscar

15/3/2017
SSL gratuito en varios dominios
Existe algún modo de usar ese certificado para varios dominios?

franklndh

25/3/2017
Tambien deberia explicar para cent os
Para todos los que usamos cent os deberian explicar como se hace

javifelices

27/3/2017
En la web de Certbot viene para varios sistemas
En la propia web de Certbot viene opción de elegir tipo de software y sistema.
https://certbot.eff.org/#centosrhel7-apache
Un saludo.