Ir al contenido principal

Let's encrypt con Apache en Ubuntu Server

Uno de los problemas que encontramos en el aula cuando queremos explicar el funcionamiento del protocolo HTTPS y su uso en un servidor web, es que los certificados digitales generalmente cuestan dinero. Por otro lado, podemos crearnos nuestro propio certificado digital firmándolo nosotros mismos (autofirmado). El inconveniente de esta solución es que cuando nos conectemos al servidor, el navegador nos mostrará una serie de mensajes advirtiéndonos del peligro que corremos al acceder a esta web; ya que el certificado no está validado (firmado) por un Autoridad de Certificación (CA) autorizada.

A finales de 2014 la Internet Security Research Group publicó el proyecto Let's Encrypt con la idea de proporcionar a la comunidad de Internet certificados digitales de forma gratuita. Además desarrollaron el protocolo ACME para que se pudiera realizar de forma automática todo el proceso de interacción con la CA para la creación, renovación y despliegue de certificados digitales. 

Certbot

A la hora de obtener un certificado digital de Let's encrypt se pueden seguir diferentes métodos, todos ellos válidos. En este artículo vamos a describir el método recomendado por la propia organización que consiste en el uso del programa Certbot. Este programa nos va a permitir automatizar todo el proceso.

El primer paso consiste en instalar Certbot. Aunque en los repositorios de las distintas distribuciones de Linux podamos encontrarlo, se aconseja que se instale desde el propio repositorio de los desarrolladores, para asegurarnos de utilizar la última versión disponible. Por otro lado, dependiendo de la distribución de Linux que se tenga y del servidor web, habrá que modificar los comandos utilizados. Como puede leerse en el propio título del artículo, vamos a describir el proceso para un servidor Apache en una distribución Ubuntu Server. Para la instalación ejecutaremos los siguientes comandos desde la terminal:

# add-apt-repository ppa:certbot/certbot
# apt update
# apt install python-certbot-apache

Ahora que ya tenemos instalado el software ejecutaremos el siguiente comando para la obtención e instalación del certificado:


# certbot --apache --apache-server-root /etc/apache2 --apache-vhost-root /etc/apache2/sites-enabled -d www.example.com

El parámetro --apache le indica al programa que vamos a utilizar el servidor web Apache. Con --apache-server-root se especifica el directorio que contiene los ficheros de configuración y --apache-vhost-root indica el directorio que contiene los Virtual Host de Apache.

A continuación se muestra la salida de este comando, se ha resaltado en rojo las entradas del usuario:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' tocancel): email@example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
(A)gree/(C)ancel: A
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
(Y)es/(N)o: N
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for www.example.com
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/www.example.com-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/www.example.com-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/www.example.com-le-ssl.conf
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Congratulations! You have successfully enabled https://www.example.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/www.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/www.example.com/privkey.pem
   Your cert will expire on 2020-02-18. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:
   Donating to ISRG / Let's Encrypt:https://letsencrypt.org/donate

   Donating to EFF: https://eff.org/donate-l
   Donating to ISRG / Let's Encrypt:https://letsencrypt.org/donate
   Donating to EFF: https://eff.org/donate-le

Si todo el proceso anterior ha ido bien, ahora tendremos instalado el certificado digital en nuestro servidor web. Para probarlo, simplemente tendremos que acceder al mismo utilizando el protocolo HTTPS (https://www.example.com).

Certbot también habrá instalado un script en /etc/cron.d para renovar el certificado de forma automática antes de que caduque, a partir de treinta días antes de la fecha de caducidad. Los certificados que proporciona Let's encrypt tienen una validez de 90 días para alentar que los usuarios utilicen el servicio automático de renovación de los mismos. Para probar si el proceso de renovación funcionará en nuestro sistema, lo podremos simular con el siguiente comando:

# certbot renew --dry-run

Cuando Certbot vaya a renovar el certificado de forma automática se encargará también de reiniciar Apache para que utilice el certificado renovado. En caso de que se produzca algún fallo en el proceso de renovación, el sistema nos lo notificará enviándonos un correo a la dirección que se haya proporcionado anteriormente.

@josrrp

Comentarios

Entradas populares de este blog

Instalando Moodle con Docker

En este blog ya hemos hablado en varios artículos sobre la tecnología de contenedores, pero hasta ahora nos habíamos centrado en LXD . En este artículo vamos a explicar cómo podemos instalar Moodle en menos de un minuto (dependiendo de la velocidad de descarga que se tenga, se puede alargar un poco más) usando contenedores. Acerca de Moodle No voy a explicar que es Moodle ni como instalarlo desde cero, para eso existe en Internet multitud de tutoriales. Lo que sí quiero comentar es que para instalar Moodle hace falta un servidor web con PHP . Además requiere que PHP tenga instalado una serie de componentes adicionales. Por otro lado, necesitamos tener instalado en el servidor un sistema de gestión de bases de datos relacional, ya que Moodle almacena la información en él. Normalmente se utiliza MySQL , MariaDB o PostgreSQL . También debemos crear una base de datos específica para Moodle con su respectivo usuario. Durante la instalación Moodle creará las tablas necesari

Analizando el protocolo HTTP

El objetivo de este artículo es el de explicar de forma práctica el funcionamiento del protocolo HTTP y entender el intercambio de datos que se realiza entre los servidores y los clientes web. Por otro lado, cubre la necesidad de tener un texto en español que sirva de referencia a mis alumnos de Servicios en Red  a la hora de realizar la práctica de clase  HTTP-1 . La idea es ver de forma práctica el funcionamiento interno del protocolo HTTP . Para ello, vamos a utilizar un par de herramientas de la línea de comandos de Linux ( telnet y netcat ), con las que vamos a simular el comportamiento tanto del navegador como del servidor web. HTTP es un protocolo de la capa de aplicación, y como muchos otros protocolos de esta capa, está basado en texto. De hecho, los comandos que envía el navegador al servidor y sus respuestas se pueden leer perfectamente en inglés. Por defecto, HTTP utiliza el puerto 80 TCP y HTTPS  el puerto 443 TCP. Los ejemplos que vamos a ilustrar serán

ZFS, Primera parte

Cuando el año pasado instalé LXD y lo configuré por primera vez, me encontré que podía utilizar, de hecho se recomienda, el sistema de ficheros ZFS para albergar los contenedores. Posteriormente, cuando instalé Proxmox en el servidor de mi departamento, me encontré de nuevo con  ZFS . Anteriormente no le había prestado mucha atención a  ZF S , normalmente utilizo EXT4 o XFS , pero estaba claro que había una estrecha relación entre  ZFS  y los sistemas de virtualización. ZFS  es un sistema de ficheros desarrollado por Sun Microsystems  (creadores también del lenguaje de programación Java ), posteriormente la empresa fue adquirida por Oracle , actuales propietarios. OpenZFS  es la variante libre y posee una licencia de tipo  CDDL , que aunque es software libre, es incompatible con GPL . Por este motivo, el kernel de Linux no lo incorpora de serie. Sin embargo, los usuarios pueden instalarlo sin problemas ya que se encuentra en los repositorios de la mayoría de las distribucione