Varios websites con HTTPS sobre una misma IP

[spanish]

Hace unos días, un compañero de trabajo comentaba en su página un método un tanto complicado para servir varios dominios con HTTPS desde una única IP usando TLS, a lo que yo le contesté que tan sólo hacía falta un certificado X.509 con varios dominios en atributos subjectAltName, y me retó a hacer un howto.

Ahí va algo mejor: una modificación del easy-rsa con soporte para certificados multi-dominio.

[/spanish]
[english]

Some days ago, a coworker posted on his blog an article about how to serve several HTTPS sites from a single IP address using TLS. I told him that it was easier to use a single X.509 certificate for all those domains with the subjectAltName attribute, and he dared me to write a howto about it.

I’ve done something better: I’ve modified easy-rsa so that it can generate multi-domain certs.

[/english]

9 comentarios sobre “Varios websites con HTTPS sobre una misma IP”

  1. De eso nada, entonces es que me he explicado como el culo. :)

    – Para poder montar una página con HTTPS, primero hay que generar un certificado X.509 para el cifrado.
    – Ese certificado va asociado a un dominio.
    – El navegador comprueba el dominio de la URL que tu le has pedido con el del certificado, y si no coincide es cuando te salta la alerta de «ésta página es más falsa que un duro de tres pesetas» (también comprueba que no haya caducado y que vaya firmado por una autoridad de certificación conocida)
    – Si con el Apache y una única IP configuras varios hosts virtuales, cada uno con un dominio y un certificado distinto, el chiringuito no funciona porque Apache usa siempre el mismo certificado (el primero, supongo) independientemente del dominio que le hayas pedido. Así que la comprobación del punto anterior peta (en todos menos uno que da la casualidad que coincide)
    – Esto es así porque el cifrado se realiza nada más conectarse el navegador al puerto 443 del servidor, antes de que realmente le pida «oye, amiguete, que quiero http://www.pepito.com/cosa.html«, con lo que Apache no sabe aún si tiene que usar el certificado de http://www.pepito.com o el de http://www.juanita.net.
    – Una solución es, en vez de crear un certificado por dominio (que luego Apache no va a poder usar en condiciones) usar un único certificado que incluya a todos los dominios de ese servidor.

  2. Buen post,

    llevo rato buscando información justo sobre esto y eres el primero que crea un base no muy técnica que me permite empezar a valorar la posibilidad que hace unas horas descartaba. Prefiero esta opción porque la otra me asusta ya que consiste en tener un certificado por dominio y los costes se disparan.

    Hasta donde cuentas entendido. pero como solicitar un certificado que incluya todos los dominios de un servidor?
    y mejor aun, que pasa si al cabo de unos meses añadimos un dominio a ese servidor? se puede actualizar la lista de dominios en el certificado?

    un saludo de otro informático mediocre

    Xavi

  3. Hola Xavi

    Me alegro de que te haya resultado útil el post. En general me parece que con el tema del SSL hay mucha confusión y mucha falta de información sobre cómo hacer ciertas cosas. Mucha gente no acaba de entender que el SSL va antes de la negociación HTTP, y al ir antes del Host: no hay forma de saber el dominio y no se puede tener varios certificados por IP. No sé si te das cuenta de que en la opción que dices de tener un certificado por dominio, ¡también necesitarías una IP distinta por dominio! Con un certificado multi-dominio no hace falta, con una única IP vas bien.

    Yo no he llegado a usar un certificado multi-dominio comercial, sólo para uso interno creados y firmados con el script del artículo. Aun así las empresas los ofrecen. P.ej. en GoDaddy (primer resultado que me ha salido en Google):

    https://www.godaddy.com/gdshop/ssl/ssl.asp

    Ahí tienes la opción de «Multiple Domain», que además sale más barata que los certificados individuales.

    Respecto a qué pasa si en un futuro quieres añadir un dominio más: si el certificado es privado tuyo no hay problema, generas uno nuevo, lo instalas y punto. Pero si es comprado … la verdad es que no lo sé. No sé si alguna empresa te dará la opción de «actualizar» el certificado que ya tienes añadiendo un dominio, o te tocará pedir uno nuevo. Pregúntales.

    Saludos

  4. Es muy interesante el artículo. Estoy un poco pez en temas de seguridad en internet, y leyendo este post, me surgió una duda..
    Si no estoy confudido, creo que existen certificados que permiten verificar la identidad/autoría de nombres (dominios), ips (máquinas), componentes (software)..
    Cuanto tienes un certificado ssl para una ip, es decir, lo que estás identificando de forma segura es una máquina, ¿ese mismo certificado puedes utilizarlo para múltiples propósitos:
    -Varias webs/dominios.
    -SFTP
    -SSH
    -Web Services con cifrado
    -Etc?
    Si alquien quisiese utilizar el mismo certificado para todo esto, lo cual es «correcto» porque todo esta en la misma máquina, ¿sería posible?. ¿Los navegadores serían capaces de establecer el https con todos los «n» dominos que maneje, por ejemplo, el apache de esa máquina? ¿O tendrían que usar la dirección IP en lugar del dominio para hacerlo?. Obviamente, IP y dominios están «mapeadas», ¿pero es capaz de establecer directamente el https con el dominio si la seguridad está a nivel de ip?

    La verdad, es algo que nunca me había planteado.. porque si fuese así, ya que un dominio exige una dirección ip estática, no tendría sentido que se comprasen certificados por dominio si hay varias webs en un mismo servidor.. se utilizaría el mismo certificado para todas las webs de un servidor.. Eso permitiría securizar la conexión en todos los dominios y demás aplicaciones existentes en la máquina..

    Perdón por la parrafada.

    1. Mientras que los distintos servicios usen SSL para el cifrado si, puedes usar el mismo certificado. El tema es el dominio. Los navegadores (o el cliente de correo, o FTP, o lo que sea) comprueban que el nombre (DNS) al que te estés conectando esté en el certificado, y si no lo está sacan una advertencia de seguridad. En ese caso necesitarías tener todos los servicios sobre el mismo nombre (p.ej., web, ftp y correo en «www.dominio.com»), que en mi opinión no es buena idea. Por eso, y por poder tener varios hosts virtuales en el mismo Apache con una única IP, es posible generar certificados válidos para varios dominios. Claro, que son más caros y si te comprometen ese certificado, todos los dominios están comprometidos con lo que desde el punto de vista de la seguridad tampoco es buena idea.
      Es lo de siempre, si tienes recursos (dinero) puedes hacer las cosas bien y tener distintas IP por servicio, distintos nombres de dominio y distintos certificados; pero si vas justo, te toca apañarte con lo que hay.

  5. Amigos tengo una pregunta: Tengo un dominio principal y dentro de este, tengo directorios para diferentes instalaciones WordPress. Ahora tengo la necesidad de instalar un certificado SSL en mi dominio principal ya que dentro de este también hay una instalación de comercio electrónico que necesito funcione con HTTPS. Ahora, no me interesa que mis sitios en WP se ejecuten en HTTPS. ¿Al momento de hacer la instalación del certificado, mis sitios en WP seguirán funcionando normalmente en HTTP? o ¿por el contrario mis usuarios tendrán problemas para ingresar? Muchas gracias y espero puedan ayudarme a discernir está duda.

    1. Cuando activas HTTPS tienes accesible todo por los dos prototocolos, HTTP y HTTPS. Si quieres que el sitio de comercio electrónico sólo vaya por HTTPS tienes que usar mod_rewrite o el código de la aplicación para redirigir el tráfico de HTTP a HTTPS.

Responder a bisente Cancelar respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.