SIU-Arai/apache-ssl

De SIU
Saltar a: navegación, buscar

Configurando Apache con SSL

No hay muchas razones para no utilizar TLS/SSL hoy en día.

En este artículo se dejan recursos y algunos tips de configuración para que todo funcione. De ninguna manera es LA guía de implementación. Simplemente intenta ser un lugar para aquellos que no están familiarizados con el tema.

Activando el módulo SSL en Apache

En Debian 8.0 la forma de activar el módulo de SSL es la siguiente

a2enmod ssl

Generando certificados válidos de prueba

Se creó una imagen de Docker para crear de manera razonable certificados para varios servers firmados por la misma CA.

Para utilizarlo hay que hacer lo siguiente:

  • Tener instaladas las últimas versiones de Docker y Docker Compose
  • Clonar este proyecto

Configurando el docker para generar certificados

Dirijirse a la carpeta certs. Dentro de este directorio hay un archivo llamado docker-compose.yml. Dentro de este archivo hay que modificar, mínimamente, dos variables: LISTA_SERVER y LISTA_CLIENTES.

  • LISTA_SERVER: Lista de dominios, separada por espacios, para los que se crearan certificados.
    Aquí van los nombres de dominios desde los que Apache va a servir sus archivos.
  • LISTA_CLIENTES: Lista de nombres, separada por espacios, a los que se les crearan certificados para actuar como clientes.
    La plataforma SIU-Araí usa como mecanismo de autenticación de APIs Rest client certificate authentication. Básicamente los servidores de las APIs guardan la clave pública de sus clientes y se apoya sobre la directiva de Apache SSLVerifyClient.
    El nombre (CN) que se ponga acá será el nombre de usuario de los consumidores de las APIs.

Una vez configurado el archivo ejecutar

docker-compose up

Esto creará una estructura de directorios dentro del directorio data en la raíz del proyecto. Para extraer todas las claves a un sólo directorio plano ejecutar el siguiente comando

mkdir <path con todos los certs>
sudo find data -name "*.pem" -exec cp {} <path con todos los certs> \;

Luego de seguir estos pasos ya tendremos un directorio (<path con todos los certs>) con todos los certificados que necesitaremos.

Sirviendo archivos con SSL

Copiar todos los certificados necesarios al directorio /etc/apache2/ssl. En este caso utilizaremos los creados para un entorno de pruebas.
Los archivos que tenemos en este directorio son:

-rw-r--r-- 1 root root 1980 nov 14 14:28 ca.cert.pem
-r--r--r-- 1 root root 3980 nov 14 14:28 ca-chain.cert.pem
-r--r--r-- 1 root root 1931 nov 14 14:26 usuarios.local.cert.pem
-r--r--r-- 1 root root 1704 nov 14 14:27 usuarios.local.key.pem

Vamos a configurar el host llamado usuarios.local


Activar el template SSL de Apache2

a2ensite default-ssl

Luego hay que editar el el archivo /etc/apache2/sites-enabled/default-ssl.conf

  • Agregar la entrada ServerName debajo de ServerAdmin. Por ejemplo:
 <VirtualHost _default_:443>
    ...
    ServerAdmin webmaster@localhost
    ServerName usuarios.local:443
    ...
  • Modificar las siguientes entradas para configurar los certificados
 <VirtualHost _default_:443>
    ...
    SSLCertificateFile    /etc/apache2/ssl/usuarios.local.cert.pem
    SSLCertificateKeyFile /etc/apache2/ssl/usuarios.local.key.pem
    ...
    SSLCACertificateFile /etc/apache2/ssl/ca.cert.pem            
    SSLCertificateChainFile /etc/apache2/ssl/ca-chain.cert.pem
  • Reiniciar apache
service apache2 restart
  • Listo, el sitio ya es accesible por HTTPS. Actualmente verá el warning de seguridad del browser.
    Si quiere evitar esto agregue el archivo /etc/apache2/ssl/ca.cert.pem a su navegador. En chrome es Configuración -> Administrar Certificados

Verificando clientes con SSL