Apache2 y SSL/TLS en Debian: ejemplo de configuración

Publicado por Diego Córdoba en

En este articulo aprenderemos a montar un sitio seguro SSL/TLS con certificados digitales utilizando el servidor web Apache2 en Debian.


Instalando las utilidades

Existen varias formas de generar certificados digitales parhttps http apache debian ssl tlsa utilizar en nuestro Apache. Unas usando OpenSSL directamente, otras mediante algunas utilidades de frontend.

En este caso utilizaremos ssl-cert. En otro artículo hablaremos de herramientas automatizadas como letsencrypt para generación de certificados firmados.

Lo primero debemos instalar una utilidad de ssl necesaria para la generación de los certificados digitales:

aptitude install ssl-cert

Ahora habilitamos en Apache el módulo de SSL para poder levantar sitios utilizando SSL:

a2enmod ssl

Creamos el directorio de certificados que utilizaremos en apache:

mkdir /etc/apache2/ssl

Generamos el certificado autofirmado y la clave privada:

/usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem

Al tratarse de un certificado autofirmado, el cliente recibirá una advertencia sobre violación de seguridad, puesto que su navegador desconoce la autoridad certificante.

Si nuestro servidor va a ser publico, necesitaremos generar nuestro certificado y firmarlo mediante una autoridad certificante conocida, o utilizar gratuitamente sistemas como letsencrypt.

Separamos ahora clave y certificado en dos archivos distintos, ya que el archivo apache2.pem generado contiene los dos. Supongamos que le dejamos el nombre apache.pem al certificado, y apache.key a la clave privada del servidor.

Cambiamos los permisos de la clave privada, esto es para evitar que nuestra clave se vea comprometida:

chmod 600 /etc/apache2/ssl/apache.key

Configuramos el virtualhost en Apache2

Configuramos nuestro virtual-host para que haga uso ahora de SSL, notar el puerto 443 en el que recibirá las consultas:

<VirtualHost *:443>
    ServerAdmin info@juncotic.com
    ServerName juncotic.com
    ServerAlias www.juncotic.com
    DocumentRoot /var/www/juncotic.com

    AccessFileName .htaccess

    SSLEngine on
    SSLCertificateFile    /etc/apache2/ssl/apache.pem
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key

    ErrorLog /var/log/apache2/error_juncotic.com
    CustomLog /var/log/apache2/access_juncotic.com combined
</VirtualHost>

Los campos están configurados de ejemplo, se deberán actualizar para que permitan funcionar en cada sitio particular. En este clase, el ejemplo es para juncotic.com y www.juncotic.com.https http apache debian ssl tls

El directorio /var/www/juncotic.com contendrá el contenido html/php del sitio.

Luego reiniciamos el servicio:

systemctl restart apache2.service

Si verificamos los puertos abiertos en nuestro equipo, deberemos ver las entradas para el puerto 80 y el puerto 443 ahora con ssl:

root@alumno:/var/www# ss -npltu
tcp LISTEN 0 128 :::443 :::* 
tcp LISTEN 0 128 :::80 :::* 

Si hemos configurado correctamente los DNS’s, o en su defecto, el archivo /etc/hosts de nuestro cliente, de modo que el dominio en cuestión, en este caso, juncotic.com, apunte a la dirección IP de nuestro servidor, podremos acceder desde el browser:

https://juncotic.com

Y deberemos obtener la salida correcta, como puede verse en la barra de direcciones del navegador:

apache2 apache ssl debian tls


En un artículo posterior, como comenté arriba, hablaremos de letsencrypt, un excelente mecanismo para poder crear y configurar, de forma automatizada, certificados digitales firmados por una autoridad certificante válida, para nuestros servicios en Internet.

¡Espero les resulte útil! ¡Hasta la próxima!


Diego Córdoba

- Ingeniero en Informática - Mg. Teleinformática - Tesis pendiente - Docente universitario - Investigador