20. Apache - Instalación y administración de SSL


1. Introducción

  • Apache ofrece soluciones para la comunicación segura mediante canales SSL a través del software gratuito de código abierto openssl (http://www.openssl.org).
  • Para ello es preciso compilar Apache con las opciones:
./configure --enable-ssl --with-ssl=ruta_hacia_openssl

(la ruta hacia openssl es /usr/local/ssl en la instalación predeterminada de openssl).


2.1 Emisión de un certificado de servidor.

  • Mediante openssl, generamos una clave privada:

openssl genrsa -out servidor.key 1024

  • Creamos una solicitud de certificado:

openssl req -new -key servidor.key -out servidor.csr

  • Ahora podemos elegir entre enviar nuestra solicitud de firma de certificado (Certificate Signing Request) a una entidad emisora de certificados (Thawte, Entrust, Verisign, etc.) o firmarlo nosotros mismos mediante openssl:

openssl x509 -req -days 365 -in servidor.csr -signkey servidor.key –out servidor.crt


2.2 Instalación de un certificado de servidor

  • Para indicar a Apache que utilice un certificado de servidor para conexiones SSL, simplemente hay que utilizar las siguientes directivas, indicando la ruta hacia el certificado y hacia la clave privada:
    • SSLEngine On
    • SSLCertificateFile ruta_al_certificado
    • SSLCertificateKeyFile ruta_a_la_clave_privada

Nota: estas funciones son propias del mod_ssl de Apache.


2.3 Configuración de Apache con SSL

Un ejemplo de servidor configurado con SSL:
	
	NameVirtualHost *
	<VirtualHost *:80>
		ServerName www.servidor1.com
		DocumentRoot /www/servidor1
	</VirtualHost><
	
	VirtualHost *:80>
		ServerName www.servidor2.com
		DocumentRoot /www/servidor2
	</VirtualHost><
	
	VirtualHost *:443>
		SSLEngine On
		SSLCertificateFile /www/ssl/ssl.crt
		SSLCertificateKeyFile /www/ssl/ssl.key
		ServerName www.servidor-seguro.com
		DocumentRoot /www/servidor-seguro
	</VirtualHost>
	

2.4 Indicaciones

  • No hay que olvidar que todos los puertos por los que escucha Apache hay que indicarlos con la directiva Listen. Por ejemplo:
Listen 80
Listen 443
  • Por la definición del protocolo https, no se puede emplear la etiqueta Hostname para discriminar peticiones seguras, de modo que un servidor, por cada dirección IP y puerto sólo admite un servidor virtual.
  • Si deseamos que el acceso al contenido de un directorio esté prohibido a menos que se realice mediante una conexión segura, podemos incluir SSLRequireSSL en un bloque Directory o una directiva .htaccess
vidalmb_admin – Mar, 24/07/2007 – 14:31