SysAdmin

Como instalar un certificado gratuito para un sitio web usando Lestencrypt

Este post enumera los pasos para instalar un certificado en un sitio web usando la herramienta cert-boot, de la empresa Letsencrypt.
El certificado de Letsencrypt es totalmente gratuito.
Para seguir los pasos tienes que tener acceso a la terminal del sistema operativo con privilegios de root.

Paso 1:
Descargar el ejecutable certbot-auto desde el sitio oficial, este comando es el que va a instalar el certificado en nuestro servidor.

# cd /root
# wget https://dl.eff.org/certbot-auto

Paso 2
Otorgar privilegios de ejecución al programa certbot-auto

# chmod a+x ./certboot-auto

Paso 3
Modificar el archivo de configuración del sitio web voy a suponer que el sitio tiene el nombre: nombre_sitio.com, el webserver que voy a usar es apache y el archivo de configuración se llama nombre_sitio.conf.

<Directory /var/www/nombre_sitio/.well-known/acme-challenge>
DefaultType text/plain
</Directory>

El archivo completo es el siguiente:

# cd /etc/apache2/sites-available
# vi nombre_sitio.conf
<VirtualHost *:80>
ServerName nombre_sitio.com
ServerAlias www.nombre_sitio.com
DocumentRoot /var/www/nombre_sitio.com
<Directory /var/www/nombre_sitio.com>
Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
allow from all
  </Directory>
  <Directory /var/www/nombre_sitio/.well-known/acme-challenge>
  DefaultType text/plain
  </Directory> }
  ErrorLog /var/log/apache2/nombre_sitio.com-error.log
  LogLevel warn
  CustomLog /var/log/apache2/nombre_sitio.com-access.log combined
</VirtualHost>

Paso 4
Actualizar la configuración de Apache para el sitio:

# a2ensite nombre_sitio.conf
# sytemctl restart apache2

Paso 5
Obtener el certificado.
Para obtner el certificaco vamos a ejecutar el comando certbot-auto que descargamos y le vamos a agregar el parámetro certonly.

./certbot-auto certonly
Saving debug log to /var/log/letsencrypt/letsencrypt.log
How would you like to authenticate with the ACME CA?

1: Apache Web Server plugin (apache)
2: Spin up a temporary webserver (standalone)
3: Place files in webroot directory (webroot)

Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 3
Plugins selected: Authenticator webroot, Installer None
Please enter in your domain name(s) (comma and/or space separated) (Enter 'c'
to cancel): nombre_sitio.com
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for nombre_sitio.com
Input the webroot for nombre_sitio.com: (Enter 'c' to cancel): /var/www/nombre_sitio.com
Waiting for verification…
Cleaning up challenges
IMPORTANT NOTES:
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/nombre_sitio.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/nombre_sitio.com/privkey.pem
Your cert will expire on 2019-05-15. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew all of your certificates, run
"certbot-auto renew"
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-le

Paso 6:
Vamos a escribir la configuración final de nuestro sitio, agregando un redirección para que
Todo lo que llegue al puerto 80 sea redireccionado al puerto 443.

<VirtualHost *:80>
ServerName nombre_sitio.com
ServerAlias www.nombre_sitio.com
DocumentRoot /var/www/nombre_sitio.com
Redirect permanent / https://nombre_sitio.com/
</VirtualHost>
<VirtualHost *:443>
ServerName nombre_sitio.com
ServerAlias www.nombre_sitio.com
DocumentRoot /var/www/nombre_sitio.com
DirectoryIndex index.html index.php
<Directory /var/www/nombre_sitio.com>
  Options Indexes FollowSymLinks MultiViews
AllowOverride All
  Order allow,deny
  allow from all
  </Directory>
  AccessFileName .htaccess
  <Directory /var/www/nombre_sitio.com/.well-known/acme-challenge>
  DefaultType text/plain
  </Directory>
  SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/nombre_sitio.com/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/nombre_sitio.com/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/nombre_sitio.com/fullchain.pem
  <FilesMatch "\.(php|py)$">
  SSLOptions +StdEnvVars
</FilesMatch>
BrowserMatch "MSIE [2-6]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

  ErrorLog /var/log/apache2/nombre_sitio.com-error.log
  CustomLog /var/log/apache2/nombre_sitio.com-access.log combined
</VirtualHost>

Paso 7
Vamos a actualizar la configuración de apache.

# systemctl reload apache2

Paso 8
Eso es todo ahora siguiendo el ejemplo vamos a nuestro navegador y navegamos el sitio de la siguiente manera:
http://nombre_sitio.com

Si todo esta bien tiene que cambiar a:
https://nombre_sitio.com