Instalar un certificado SSL desde 0

Manu Pijierro
7 min readMar 26, 2017

--

En este post voy a indicar paso a paso como he instalado la última versión estable de PHP hasta la fecha y un certificado SSL en un nuevo servidor con Linux. Era un post, pero sobre todo una tarea, que tenía pendiente llevar a cabo desde hacía mucho tiempo ya que nunca había instalado un certificado, de manera que hace un par de días me puse manos a la obra. Os cuento como ha sido todo el proceso.

1. Instalar VPS

Lo primero fue adquirir una VPS nueva y limpia para tener tranquilidad de no romper nada. En mi caso opté por OVH que es dónde tengo el resto de VPS’s de otros proyectos y que de momento funcionan muy bien. Me cogí, para la prueba la más básica, una máquina con 1 core, 2 GB de ram y un precio de apenas 3 euros al mes de coste. Un derroche, lo sé. Entre las instalaciones que vienen por defecto, opté por instalar una Debian aunque luego suelo cambiarla desde el panel por otra más específica, así que al final quedó instalada una que en OVH llaman LAMP 1.0. La razón de elegir esta es porque ya viene con todo el entorno para empezar a desarrollar con PHP, de manera que ya viene con Apache instalado, PHP 5.6, MySql, configuración de FTP…etc. Aunque yo luego suelo crear usuarios y grupos de desarrollo y añadir alguna configuración y software más, en este caso no hice nada extra en este sentido y quedé la máquina así configurada. Bueno, salvo realizar el clásico apt-get update.

Debian final instalada en la VPS

2. Tener un dominio.

Lógicamente, no solo hace falta una máquina sino que además tendremos que tener un dominio sobre el cual veremos la conexión SSL. En mi caso me compré uno nuevo, buscc.es. Este dominio forma parte de un side proyect que se me ocurrió la semana pasada y que me servirá como conejillo de indias para probar todo esto. Con el dominio tuve un problema que contaré más adelante cuando llegue el momento.

3. Actualizar a PHP 7.1.3

Tal y como he comentado, el entorno instalado viene con PHP 5.6. Así que decidí actualizar a la última versión estable de PHP, la 7.1.3. Los pasos que seguí fueron, entre otros, los indicados por esta página.

1. apt-get install apt-transport-https lsb-release ca-certificates wget

2. wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

3. echo “deb https://packages.sury.org/php/ $(lsb_release -sc) main” > /etc/apt/sources.list.d/php.list

4. apt-get update

5. locale-gen es_ES.UTF-8

En mi caso, instalé la configuración local en español.

6. dpkg-reconfigure locales

Este comando anterior, en mi caso, me abrió un script visual en el que podía instalar y seleccionar las configuraciones locales del idioma, hora, moneda…etc., que quería. Elegí español, claro. Por lo que creo que el paso 5 me lo podría haber ahorrado, pero bueno.

7. apt-get install php7.1

Instalación de php 7.

8. apt-get install php7.1-xdebug php7.1-xml php7.1-mysql php7.1-mbstring php7.1-curl php7.1-json php7.1-mcrypt php7.1-fpm

Instalamos módulos de php 7. Aquí, lógicamente cada uno incluirá o excluirá aquellos que considere oportunos.

9. a2enmod rewrite

10. a2enmod proxy_fcgi setenvif

11. a2enconf php7.1-fpm

12. apache2 reload

13. apache2 restart

14. nano /etc/php/7.1/php.ini

max_execution_time = 60
display_errors = On
post_max_size = 128M
upload_max_filesize = 128M

Actualizo la anterior configuración de PHP.

Con estos catorce pasos tengo Apache y PHP en el estado en el que quería.

3. Instalar SSL de Let’s Encrypt

A continuación vamos a instalar el certificado SSL. La instalación fue sencilla, poco más que lanzar un comando. Supongo que habrá configuraciones manuales más complejas y mejores.

En la propia página de Let’s Encrypt, indican como instalar el certificado dependiendo de si tienes acceso a la shell del sistema o no. En caso de tenerla, también te indica el proceso para hacerlo todo de forma manual o automatizada mediante Certbot, que activa HTTPS en sitios web desplegando certificados Let’s Encrypt.

Al entrar en la página de Cerbot, lo primero que te pide es seleccionar el servidor que estás utilizando y el sistema operativo. En mi caso, seleccioné Apache y Debian 8 Jessie. Al seleccionarlo, te lleva automáticamente a los pasos y comandos que hay que ir introduciendo para instalar el certificado.

  • Previamente a la instalación hay que configurar Debian Backports. Para esto, hay que seguir los pasos indicados en esta página en la cual te explican como realizar esta operación. En el caso de Debian Jessie, hay que añadir al archivo sources.list lo siguiente:
deb http://ftp.debian.org/debian jessie-backports main

Y luego actualizar.

apt-get update
  • Una vez instalados Debian Backports, continuamos con Certbot.
sudo apt-get install python-certbot-apache -t jessie-backports
  • Y ahora lanzamos el script para automatizar la instalación. Antes de esto, revisa la siguiente actualización anotada:
certbot --apache

Actualización (inicio)

Hoy día 19 de Mayo de 2018 seguí nuevamente estos pasos y me encontré con un error al realizar el paso anterior. El error que me apareció fue el siguiente:

Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA.

Buscando información sobre este problema llegué a un post de los foros de ayuda de Let’s Encrypt (leer aquí), en el que daban una solución a este problema:

You need to upgrade your Certbot. Let’s Encrypt permanently disabled the TLS-SNI-01 challenge 1.3k due to a security report, as of 2018–01–09.

Certbot 0.21.0 was released on 2018–01–17 2.7k. It adds support for the HTTP-01 challenge to the Apache and Nginx plugins. If you have installed Certbot from your OS package manager (that is, if you use the certbot or letsencrypt commands rather than certbot-auto), version 0.21.0 probably isn’t available yet. You should encourage the Certbot package maintainers for your system to provide a newer version. In the meantime, you can install Certbot through certbot-auto 6.0k which will automatically install the latest version.

Así que lo hice, fue seguir la instalación de Cerbot de manera manual siguiendo los pasos indicados en esta página:

wget https://dl.eff.org/certbot-autochmod a+x ./certbot-auto./certbot-auto --help

Actualización (fin)

A partir de aquí, se inicia un script visual en el se deberá configurar el proceso.

Lo primero será seleccionar el tipo de configuración de HTTPS. Si lo queremos para todas las peticiones o seguimos permitiendo también la conexión HTTP. Esto depende de cada uno.

Posteriormente habrá que introducir el dominio para el que queremos que funcione HTTPS. En este caso tal y como comenté me creé un dominio específico para esto.

En este punto tuve un PROBLEMA con la instalación. Como he comentado, adquirí un dominio (buscc.es) momentos antes de comenzar la instalación, lo que suponía que mi dominio no estaba aún propagado por las DNS.

Al realizar la instalación, supongo que uno de los procesos es verificar desde Let’s Encrypt la existencia del dominio que al ser de tan reciente creación no lo encontraba, así que decidí esperar unas horas para continuar con el proceso. Efectivamente, tras la esperar, todo el proceso se lanzó sin problemas.

Durante el proceso se van mostrando distintos mensajes con las operaciones que se van realizando.

Si va todo correcto, tendremos el esperado Congratulations! advirtiéndonos de que todo ha ido correctamente. Además, indican una web en la que podremos comprobar el estado de instalación de nuestro certificado en el que se puede ver que si que está instalado.

Aunque también es fácil comprobar que ha ido todo bien ya que si accedemos a la web https://www.buscc.es podremos ver lo siguiente.

De esta manera ha quedado configurado el dominio con SSL.

Nota: buscc.es dominio fue adquirido únicamente para probar la instalación de la conexión SSL y ya ha sido dado de baja, por lo que si accedes a él para cualquier comprobación podrás ver que ha dejado de existir.

Chimpún.

--

--

No responses yet