Julián Perelli    Projects    Blog    Talks

HTTPS

Qué es HTTPS

Es un protocolo construido sobre HTTP (el protocolo que domina la web), que extiende y ofrece encriptación de las comunicaciones utilizando el protocolo SSH.

HTTPS Tunnel

Por qué es necesario utilizar HTTPS

En caso de que exista un ataque muy simple de escucha pasiva en la red (eavesdropping), si lo que viaja en la red no esta encriptado (que es el caso de HTTP puro), se revela información sensible, como puede ser: contraseñas de diversos sistemas, números de cuentas bancarias, montos de dinero, nombres, etc.

Arquitectura

Arquitectura

Un servidor tiene dos puertos abiertos, uno en el 443, que sirve contenido bajo HTTPS (http+SSL) y otro en el puerto 80 que sirve contenido utilizando el protocolo HTTP.

Cada uno de los puertos está asociado a un virtualhost, y tendrá su propia configuración.

Consideraciones de configuración

Puertos abiertos

Un servidor web http solo necesita utilizar el puerto 80 para dar servicio a todos sus clientes. En el caso de la utilización de HTTPS, es necesaria la utilización del puerto 443.

Para que sea posible el uso del puerto 443, todos los elementos de red intermedios deben enviar los paquetes y no filtrar informacion enviada a este puerto.

Certificado

Existen 2 tipos de certificados:

  1. Los autogenerados
    • ↑ No tienen costos monetarios.
    • ↓ Generan carteles rojos de advertencia en el cliente.
    • ↓ Necesitan que el cliente realice configuraciones adicionales.
  2. Los proveídos por una entidad certificante (CA)
    • ↑ No generan carteles rojos en el cliente.
    • ↑ No necesitan configuración alguna en el cliente.
    • ↓ Se requiere un monto de dinero (a partir de 200$/año).

Ejemplo de configuración para apache

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName www.ms.gba.gov.ar

        DocumentRoot /var/www/sitio/public_html

        <Directory /var/www/sitio/public_html/>
                Options FollowSymLinks MultiViews Indexes
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        # Esta página muestra instrucciones para acceder a /gestor por https
        #  y cómo instalar un certificado en el cliente
        Redirect /gestor http://www-test.ms.gba.gov.ar/ssl-requerido/?redirect=gestor

        # Si va por https, que vaya todo por https
        # se puede cambiar (gestor) por (gestor|seguro|etc)
        RewriteCond %{HTTPS} !on
        RewriteRule ^/(gestor)$ https://%{HTTP_HOST}/$1 [R=301,NC,L]
        RewriteCond %{HTTPS} !on
        RewriteCond %{HTTP_REFERER} !^https(.*)/(gestor)(.*)$ [NC]
        #RewriteCond %{REQUEST_URI} !^(.*)/(gestor)(.*)$ [NC]
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L]
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerAdmin admin@ms.gba.gov.ar
        ServerName www-test.ms.gba.gov.ar

        DocumentRoot /var/www/sitio/public_html

        <Directory /var/www/sitio/public_html>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        

</VirtualHost>
</IfModule>