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:
El software que necesitamos está en los repositorios oficiales, lo instalamos con este comando:
apt-get install python-letsencrypt-apache
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
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
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.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...