Tabla de Contenidos
208.2 Apache configuration for HTTPS
Pertence a Topic 208: Web Services
- Weight: 3
- Description: Candidates should be able to configure a web server to provide HTTPS.
- Key Knowledge Areas:
- SSL configuration files, tools and utilities
- Generate a server private key and CSR for a commercial CA
- Generate a self-signed Certificate
- Install the key and certificate, including intermediate CAs
- Configure Virtual Hosting using SNI
- Awareness of the issues with Virtual Hosting and use of SSL
- Security issues in SSL use, disable insecure protocols and ciphers
- Terms and Utilities:
- Apache2 configuration files
/etc/ssl/,/etc/pki/- openssl, CA.pl
SSLEngine,SSLCertificateKeyFile,SSLCertificateFileSSLCACertificateFile,SSLCACertificatePathSSLProtocol,SSLCipherSuite,ServerTokens,ServerSignature,TraceEnable
SSL
SSL (Secure Socket Layer) es un protocolo de seguridad de la capa de aplicación.
Funciona con muchos protocolos, pero su uso más extendido es para asegurar http (https).
SSL proporciona servicios de autentificación, de confidencialidad y de control de la integridad.
Criptografía y certificados
Cualquier infraestructura criptográfica se basa en algoritmos de cifrado. Estos algoritmos pueden pertenecer a tres familias distintas: los algoritmos simétricos, donde se cifra y se descifra gracias a una clave única; los algoritmos asimétricos, donde se dispone de un par de claves, una para cifrar y otra para descifrar, y, finalmente, los algoritmos de hash, de un solo sentido y que no usan la clave de cifrado.
SSL utiliza criptografía asimétrica, la cual utiliza 2 claves, una pública y otra privada.
Los certificados digitales X509 tienen como objetivo establecer de modo formal un enlace entre una identidad (nombre, dirección IP, etc.) y una clave pública.
Los certificados no pueden falsificarse, ya que están firmados por un tercero Certificate Authority (autoridad de certificación) con quien todos tienen una relación de confianza.
Apache
mod_ssl
Para poder activar el soporte de ssl en Apache necesitamos el módulo correspondiente: mod_ssl
Suele venir de serie con la instalación de apache, o si no debemos instalar el paquete openssl
Para activarlo, debemos incluir en la configuración la línea LoadModule correspondiente (Centos/RedHat):
LoadModule mod_ssl modules/mod_ssl.so
O activar el módulo de modo dinámico con la herramienta a2enmod (Debian/Ubuntu):
a2enmod ssl
mod_ssl y Certificados
Después de esto reiniciamos el servidor apache, y el mod_ssl se activará con el inicio de Apache
El siguiente paso es disponer de un certificado ssl válido
Podemos obtener el certificado de una Autoridad Certificadora (CA), o podemos utilizar un certificado autofirmado.
Los certificados, por defecto, se encuentran en la ruta /etc/ssl/certs
Las claves están en /etc/ssl/private
Si queremos generar un certificado autofirmado usaremos la herramienta openssl
Generación del certificado autofirmado
openssl req -x509 -nodes -newkey rsa:<tamaño_clave> -keyout <archivo_clave> -out <archivo_certificado>
| Parámetro | Descripción |
|---|---|
req | Solicitud de certificado. |
-x509 | Se desea un certificado autofirmado y no una petición de firma una CA. |
-nodes | La clave del servidor no debe estar protegida con contraseña. |
-newkey rsa:<tamaño_clave> | Se crean nuevas claves asimétricas RSA cuyo tamaño se proporciona en número de bits. |
-keyout <archivo_clave> | El archivo que contiene la clave privada del servidor. |
-out <archivo_certificado> | El archivo que contiene el certificado del servidor. |
Ejemplo:
openssl req -x509 -nodes -newkey rsa:1024 -keyout /root/servidor.key -out /root/certificado.pem
Pedirá una serie de datos para generar la clave:
- Country Name
- Province Name
- Locality Name
- Organization Name
- Organizational Unit Name
- Common Name
- E-mail address
Finalmente se habrán generado los siguientes ficheros:
servidor.keycertificado.pem
Configuración de SSL
Pasos:
1. El módulo necesario para el funcionamiento de SSL es mod_ssl:
LoadModule ssl_module /ruta/mod_ssl.so
2. Configuración de las claves del servidor:
SSLCertificateFile /ruta/archivo_certificado SSLCertificateKeyFile /ruta/archivo_clave
| Parámetro | Descripción |
|---|---|
SSLCertificateFile | Define el archivo que contiene el certificado del servidor (con su clave pública). |
SSLCertificateKeyFile | Define el archivo que contiene la clave privada del servidor. |
3. Apertura del puerto HTTPS añadiendo en ports.conf:
Listen 443
4. Activación del motor SSL:
SSLEngine on
Los anteriores parámetros deben incluirse en el fichero apache2.conf
5. (Opcional) Autentificación de los clientes de otra CA mediante certificado. En esta situación, el servidor Apache tiene que disponer de un certificado de la autoridad que haya emitido los certificados de los clientes:
SSLVerifyClient require SSLCACertificateFile certificado_ca
Otras directivas de configuración SSL
| Directiva | Descripción |
|---|---|
SSLCACertificateFile | Indica el fichero que contiene la cadena de los certificados de las CAs en orden de preferencia. |
SSLCACertificatePath | Indica el directorio que contiene los certificados de las CAs. |
SSLCipherSuite | Establece los tipos de cifrados permitidos. |
SSLProtocol | Establece los tipos de protocolos permitidos. |
ServerSignature | |
ServerTokens | Controla el tipo de cabecera que de envía a los clientes en cada petición. |
En ssl.conf suelen estar comentadas o con un valor ya establecido.
SSL en Virtual Hosts
Si queremos aplicar SSL a los diferentes Virtual Hosts de nuestro servidor, tendremos que especificar las configuraciones anteriores es el archivo de cada virtualhost
Habría que especificar que el puerto que responde es el 443:
<VirtualHost *:443> ServerName ejemplo.org SSLEngine On SSLCertificateFile /etc/ssl/webserver/apache.pem SSLCertificateKeyFile /etc/ssl/webserver/apache.key DocumentRoot /srv/http ErrorLog /var/log/apache2/error.log </VirtualHost>
