Vamos a ver cómo conseguir un certificado SSL/TLS GRATUITO de ZeroSSL e implementarlo en los servidores web Apache y Nginx.
Introducción
Es posible que haya oído hablar mucho de términos como HTTP y HTTPS. En los primeros tiempos, se definió un protocolo que se denominó Protocolo de transferencia de hipertexto (HTTP). Se trata de una forma de comunicación entre el navegador y el servidor web. Cuando se produce esta comunicación, los datos que viajan en un protocolo HTTP, sólo viajan en los formatos de texto claro. Debido a esto, se ha constatado que la comunicación HTTP no es segura, y los hackers pudieron atacar e interceptar los mensajes importantes y sensibles.
Para solucionar este problema, apareció el protocolo HTTPS. Se trata de un protocolo seguro, cuyas siglas significan HyperText Transfer Protocol Secure. Simplemente realiza la encriptación de los datos cuando se produce la comunicación, y los datos viajan desde el navegador web hasta el servidor web. De modo que si algún pirata informático capta esa información, todo queda encriptado.
¿Cómo funciona HTTPS?
El protocolo HTTPS funciona con cualquiera de las dos cosas, es decir SSL(Secure Socket Layer) o TLS(Transport Layer Security). Ambas herramientas utilizan PKI(Infraestructura de Clave Pública). La PKI, a su vez, utiliza dos claves, es decir, la pública y la privada. Todo lo que se cifra utilizando la clave pública puede descifrarse utilizando la clave privada y viceversa.
Cuando instalamos un certificado SSL/TLS en nuestro sitio web, se activa la función de «cifrado de datos«. SSL se utiliza como punto de control para garantizar la seguridad de los datos que se intercambian a través de Internet entre el navegador del usuario y el servidor del sitio web.
Obtención del certificado ZeroSSL
ZeroSSL es una autoridad de certificación (CA) que facilita a todo el mundo la instalación de un certificado para hacer seguro el sitio web. Puede obtener hasta 3 certificados con 90 días de validez de forma gratuita.
- Registrarse en ZeroSSL
- Después de iniciar sesión, aparecerá la siguiente página. Haga clic en «Nuevo certificado»
- Introduzca la URL que desea proteger y haga clic en ‘Siguiente paso‘
- Seleccione certificado de 90 días y Siguiente
- Procedamos con la opción de autogenerar CSR
- Proceda con el plan «Gratuito
A continuación, tendrá que verificar la titularidad del dominio. Existen varias opciones.
- DNS – si puede añadir una entrada de registro DNS
- Correo electrónico – si puede recibir el correo electrónico a admin@yourdomain.com
- Carga de archivos – si puede cargar un archivo en la raíz del dominio
Elija lo que funcione para usted. Proceda con la entrada DNS.
- He añadido el CNAME y listo para verificar el dominio.
- Finalmente, una vez verificado, el certificado SSL está listo para descargar.
Aquí están mis certificados descargados.
Es hora de ponerlo en práctica.
Implementación en Apache
A continuación, instalaré Apache en Ubuntu.
Inicie sesión en el servidor e instale utilizando el comando apt-get
.
sudo apt-get install apache2
Averigüemos si Apache se está ejecutando utilizando el comando systemctl.
root@geekflare-lab:~# systemctl status apache2
● apache2.service - El servidor HTTP Apache
Cargado: cargado (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Cargado /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Activo: activo (en ejecución) desde sáb 2020-05-23 16:15:56 UTC; hace 3s
Proceso: 7852 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS)
Proceso: 14179 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
PID principal: 14196 (apache2)
Tareas: 55 (límite: 2362)
Grupo C /system.slice/apache2.service
├─14196 /usr/sbin/apache2 -k start
├─14199 /usr/sbin/apache2 -k start
└─14200 /usr/sbin/apache2 -k start
May 23 16:15:56 geekflare-lab systemd<x><x><x><x>[1]</x></x></x></x>: Iniciando el servidor HTTP Apache...
23 de mayo 16:15:56 geekflare-lab apachectl[14179]: AH00558: apache2: No se ha podido determinar de forma fiable el nombre de dominio completo del servidor, utilizando 127.0.1.1. Configure el 'Servir
23 de mayo 16:15:56 geekflare-lab systemd<x><x><x><x>[1]</x></x></x></x>: Iniciado el servidor HTTP Apache.
Genial, se está ejecutando.
Mi dominio (lab.geekflare.com/es) ya está apuntando a este servidor Apache.
Pero como puede ver, no está asegurado, y por lo tanto, vamos a configurar el certificado que obtuvimos de ZeroSSL.
- Vamos a crear un directorio llamado
sslCA
bajo /etc para almacenar los archivos del certificado.
cd /etc
mkdir sslCA
- Transfiera los archivos a la carpeta recién creada en el servidor
root@geekflare-lab:/etc/sslCA# ll
total 20
drwxr-xr-x 2 raíz root 4096 mayo 18 12:13 ./
drwxr-xr-x 92 raíz root 4096 mayo 22 06:07 ../
-rw-r--r-- 1 root root 2430 Mayo 18 05:37 ca_bundle.crt
-rw-r--r-- 1 root 2292 Mayo 18 05:37 certificate.crt
-rw-r--r-- 1 root raíz 1702 Mayo 18 05:37 private.key
- Habilitar módulo SSL
sudo a2enmod SSL
- Tendremos que reiniciar el servidor web para que se reconozcan los cambios.
sudo service apache2 restart
- El siguiente paso es configurar los archivos de certificado en el archivo de configuración SSL de Apache.
cd /etc/apache2/mods-available
- El nombre del archivo es ssl.conf. Tenemos que añadir lo siguiente en la directiva
<VirtualHost>
.
<VirtualHost _por defecto_:443> SSLEngine on SSLCertificateFile /etc/SSLCA/certificate.crt SSLCertificateKeyFile /etc/SSLCA/private.key SSLCertificateChainFile /etc/SSLCA/ca_bundle.crt
</host_virtual>
- ¡Guarde el archivo y salga
:wq!
Después de realizar el reinicio, el SSL se habilitará en el sitio. Accedamos al sitio utilizando https://
Y, como puede ver, «La conexión es segura». Significa que nuestro certificado SSL se ha aplicado correctamente a nuestro servidor web.
Implementación en Nginx
Nginx se encuentra en los repositorios por defecto de Ubuntu, por lo que es posible instalarlo desde aquí utilizando el sistema de empaquetado adecuado.
- El siguiente comando se utiliza para instalar el «Nginx«.
sudo apt install nginx
- Después de que la instalación tenga éxito, podemos iniciar el Nginx usando el comando de abajo.
systemctl start nginx
- Compruebe el estado de Nginx.
root@geekflare-lab:~# systemctl status nginx ● nginx.service - Un servidor web de alto rendimiento y un servidor proxy inverso Cargado: cargado (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Activo: activo (en ejecución) desde Tue 2020-05-19 06:54:00 UTC; hace 4 días Documentación: man:nginx(8) Proceso: 8634 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS) Proceso: 8661 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Proceso: 8653 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) PID principal: 8664 (nginx) Tareas: 2 (límite: 2362) CGroup: /system.slice/nginx.service ├─8664 nginx: proceso maestro /usr/sbin/nginx -g daemon on; master_process on; └─8707 nginx: proceso trabajador May 19 06:54:00 geekflare-lab systemd<x><x><x><x>[1]</x></x></x></x>: Iniciando un servidor web de alto rendimiento y un servidor proxy inverso... May 19 06:54:00 geekflare-lab systemd[1<x><x><x><x>]</x></x></x></x>: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument 19 de mayo 06:54:00 geekflare-lab systemd<x><x><x><x>[</x></x></x></x>1]: Iniciado Un servidor web de alto rendimiento y un servidor proxy inverso.
- Como era de esperar, el navegador mostrará la advertencia de que la conexión a este sitio no es segura.
Implementemos rápidamente el cert para que el sitio sea seguro utilizando HTTPS.
- Creemos el archivo
example.com.conf
en la ubicación/etc/nginx/conf.d
. El contenido del archivo se verá como el siguiente.
servidor {
listen 443 SSL default_server;
listen [::]:443 SSL default_server ;
nombre_servidor lab.geekflare.com/es lab.geekflare.com/es;
root /var/www/html;
}
- Ahora es necesario añadir un nombre de archivo de certificado en el archivo
nginx.conf
que se encuentra en el directorio «/etc/nginx
«. - Añada lo siguiente en la directiva http
ssl_certificate /etc/sslCA/certificate.crt;
ssl_certificate_key /etc/sslCA/private.key;
- Reinicie Nginx para verificar los cambios
systemctl restart nginx
Y ya está.
¿Está interesado en aprender Nginx? Eche un vistazo a este curso de fundamentos.
Probar la configuración SSL/TLS
La configuración por defecto puede ser vulnerable, por lo que le sugiero encarecidamente que pruebe su sitio después de implementar el certificado. Hay varias herramientas en línea que puede consultar aquí.
Conclusión
Espero que esto le dé una idea de cómo obtener un certificado de ZeroSSL e implementarlo en dos de los servidores web más populares.