Cómo configurar VirtualHosts para HTTPS

8 Octubre 2013 at 16:10 by Adrián Pérez

ApacheEn Apache, usamos los VirtualHosts para poder definir diferentes proyectos web, cada uno con su propio dominio (o dominios), escuchando tras el mismo puerto e IP. Ésto podemos hacerlo para conexiones HTTP normales, pero antiguamente no se podía para HTTPS, puesto que la conexión venía cifrada y por tanto Apache no podía saber a qué dominio se quería acceder.

Al parecer, desde el 2006 se incorporó una extensión que le permitía al cliente (el navegador del usuario) enviar el dominio a consultar en la primera petición, antes de iniciar la transferencia cifrada de datos, permitiéndo así al servidor poder usar el mecanismo de VirtualHosts para tener varios sitios web HTTPS escuchando por el mismo puerto (típicamente el 443).

Requisitos

Seguramente nuestro servidor Linux con Apache ya tenga instalados los requisitos para funcionar, pero para asegurarnos, bastará con confirmar que tenemos:

  • openSSL 0.9.8f o posterior instalado
  • mod_ssl instalado en Apache

En mi ejemplo, un Fedora release 13 (Goddard) con Apache 2.2.15, lo he confirmado así:

[root@myServer]# openssl version
OpenSSL 1.0.0d-fips 8 Feb 2011

[root@myServer]# httpd -M | grep -i ssl
ssl_module (shared)

[root@myServer]# grep -i ssl /var/log/httpd/error_log*
Apache/2.2.15 (Unix) DAV/2 PHP/5.3.3 mod_ssl/2.2.15 OpenSSL/1.0.0-fips mod_wsgi/3.4 Python/2.7.5 configured -- resuming normal operations

Si no tienes openssl ni mod_ssl, puedes instalarlo con yum y posteriormente reiniciar Apache:

[root@myServer]# yum install openssl mod_ssl
[root@myServer]# /etc/init.d/httpd restart

Configuración

Como comentamos, para habilitar el uso de VirtualHosts para HTTPS, con las versiones actuales de Apache bastará con habilitar la directiva NameVirtualHost, igual que hacemos para el puerto 80, pero esta vez para el puerto 443. Podemos incluir esta directiva al final de nuestro fichero de configuración de Apache (/etc/httpd/conf/httpd.conf) o al principio de nuestro fichero para los virtualhosts:

NameVirtualHost *:443

NOTA: Es de suponer que se tiene configurado el servidor para aceptar conexiones HTTPS, si no, puedes mirar aquí cómo generar una petición CSR para obtener tu certificado SSL. Si acabas de instalar instalar mod_ssl, se te habrá generado un fichero ssl.conf en /etc/httpd/conf.d/; en ese caso deberás eliminar todo lo referente a la sección "VirtualHost" que viene por defecto en ese fichero. Con ésto, estarás listo para trabajar con conexiones HTTPS en tu servidor CentOS/RedHat/Fedora.

Y ya está. El resumen es que desde hace tiempo, basta con habilitar el NameVirtualHost para el puerto 443 y tener así, la posibilidad de trabajar con VirtualHosts para HTTPS. Tan fácil como eso.

 

Fuentes:

http://miguelangelnieto.net/?action=view&url=m%C3%BAltiples-virtualhost-en-ssl-en-una-%C3%BAnica-ip-sni

http://www.digicert.com/ssl-support/apache-multiple-ssl-certificates-using-sni.htm

 

Flickr! Foto por Airwolfhound