Apache, Instalar Certificado de Seguridad Privado

Para continuar con la parte de certificados de seguridad SSL vamos a crear uno privado utilizarlo internamente. En el artículo anterior deje un pequeño resumen sobre SSL, pero aqúi voy a dejar la misma introducción.

Si un día te piden un portal o servicio seguro y validado por https necesitas algo llamado SSL (Secure Socket Layer) que básicamente es un protocolo para transferir datos de forma segura, y se utiliza para:

Compartir información mediante un mecanismo de codificación entre el cliente y el servidor (aquí pueden leer un resumen bastante claro)

Esto se hace por medio de un certificado de seguridad.

El certificado es un comprobante que emite un CA (Certificate Authority) o un tercero para garantizar que el sitio web pertenece a la empresa u organización, que es un sitio legitimo, válido y seguro. En esta ocasión vamos a emitir un certificado propío o privado para cuestiones internas.

Es muy común ver esto en páginas de intranet o en redes privadas donde se necesita transferir información sensible y confidencial, por ejemplo con transacciones de negocio, datos confidenciales, cuentas, etc… también se utilizan en procesos entre servers, como en web services.

Instalación

Los pasos que voy a describir funcionan en linux, pero si lo necesitas para windows y Mac es prácticamente lo mismo solo cambian las rutas de los archivos de configuración y la instalación del software.

Requisitos

  • Servidor Apache instalado, con los módulos ssl, proxy, proxy_html y headers activados y configurado con el puerto 443.
  • Openssl instalado, para generar un CSR (Certified Singing Request)

En google pueden ver como se instalan y en linux es fácil con el gestor de paquetes de cada distribución.

1. Crear la llave y el CSR:

Abres una consola y ejecutas el siguiente comando para crear la llave (todos mis archivos los voy aguardar en /etc/oz/)

openssl genrsa -des3 -out privateserver.key 2048

Tip: Cuidado con los bits, para la llave 2048 es lo recomendado para los sitios públicos pero aplica la misma regla entre más grande es el valor el algoritmo, es más seguro, pero de igual forma consumirá más recursos al procesar la información y puede reducir el rendimiento del servidor considerablemente, tanto que la transmisión de datos puede ser muy lenta al visualizar el contenido.

Te preguntará por la “frase“, que es la palabra para el algoritmo de codificación. Aquí escribes algo que siempre debes tener en mente , guardarla en un lugar seguro y nunca se debe de compartir.

Loading 'screen' into random state - done
Generating RSA private key, 2048 bit long modulus
...............+++
.......+++
unable to write 'random state'
e is 65537 (0x10001)
Enter pass phrase for privateserver.key:
Verifying - Enter pass phrase for privateserver.key:

bien, vamos a crear un formato especial de la llave que más adelante vamos a explicar:

openssl rsa -in privateserver.key -out privateserver.pem

Te va a preguntar por la “frase“:

Enter pass phrase for privateserver.key:
writing RSA key

Ahora creamos el CSR con la llave:

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

Te va a preguntar nuevamente la “frase“, esta es la parte más importante del proceso así cuidado con lo que vas a escribir, hay que considerar lo siguiente:

  1. NO utilices caracteres ajenos al ingles (es decir, sin acentos, no ñ ni simbolos como “&, %, $, #, etc…” )
  2. Los datos que vas a escribir son los que se van a mostrar en el certificado y son visibles por todos.
  3. Puedes escribir nombres de dominios validos y direcciones IP como 127.0.0.1. Para nuestro ejemplo vamos a usar el dominio “private.domain.com
  4. No es necesario que tengas comprado el dóminio, puedes simular uno (que es como lo vamos a hacer aquí).

Ahora ojo con los datos marcados en rojo:

Enter pass phrase for privateserver.key:
Loading 'screen' into random state - done
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:MX
State or Province Name (full name) [Some-State]:Distrito Federal
Locality Name (eg, city) []:Mexico
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Orbital Zero
Organizational Unit Name (eg, section) []:OZ
Common Name (e.g. server FQDN or YOUR name) []:private.domain.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Los attributos email, challenge password y optional company name dejalos en blanco, a mi siempre me daba errores con el CA si llenaba estos campos, mi recomendación es dejarlos en vacios.

2. Auto firmar el CSR (Self Sign)

Ahora vamos a auto firmar nuestro certificado, en este caso nosotros somos la entidad que va a certificar que nuestro sitio o servicio es valido, pero ojo no perdamos el objetivo generalmente los certificados privados se utilizan más por temas de seguridad y control interno para asegurar la transferencia de datos a través de la red, ya sea interna o via vpn, entre compañias o en web services.

Con el siguiente comando vamos a firmar nuestro “CSR”:

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

Te preguntara por la “frase“:

Loading 'screen' into random state - done
Signature ok
subject=/C=MX/ST=Distrito Federal/L=Mexico/O=Orbital Zero/OU=OZ/CN=private.domain.com
Getting Private key
Enter pass phrase for privateserver.key:
unable to write 'random state'

3. Preparar el dominio

Ahora vamos a simular que tenemos un dominio, para esto debemos editar el archivo hosts.

  • En Linux esta en /etc/hosts
  • En Windows 7 %systemroot%\system32\drivers\etc\hosts

Y agregamos el siguiente texto:

127.0.0.1 private.domain.com

En el caso de Linux debemos reiniciar el servicio de red con “sudo service networking restart” o “service network restart“, depende de tu distribución.

En el caso de Windows no hay que reiniciar el servicio, lo toma automáticamente pero el truco es poder editar el archivo, tienes que copiar y reemplazarlo.

Ahora solo comprobamos que nuestro equipo responde la dirección web con uin ping:

#ping private.domain.com

Haciendo ping a private.domain.com [127.0.0.1] con 32 bytes de datos:
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128

Estadísticas de ping para 127.0.0.1:
    Paquetes: enviados = 4, recibidos = 4, perdidos = 0
    (0% perdidos),
Tiempos aproximados de ida y vuelta en milisegundos:
    Mínimo = 0ms, Máximo = 0ms, Media = 0ms

Listo ya tenemos nuestro dominio piñata apuntando a nuestra ip local :D!

4. Instalar los certificados en el Apache Server

Hay que editar el archivo de configuración del apache, el mio es el “/etc/apache2/httpd.conf“, el nombre y la ubicación pueden cambiar por el sistema operativo y la versión que estés utilizando.

Y agregas las siguientes líneas:

Listen 443

<IFModule mod_proxy.c>
    <VirtualHost *:443>

    ServerAdmin webmaster@orbitalzero.com
    ServerName private.domain.com
    ServerAlias private.domain.com

    ProxyRequests Off
    ProxyPreserveHost On

    <proxy >
        Order deny,allow
        Allow from all
    </proxy>

    SSLEngine on
    SSLCertificateFile /etc/oz/privateserver.crt
    SSLCertificateKeyFile /etc/oz/privateserver.pem

    </VirtualHost>

</IFModule>

Las más importantes son SSLCertificateFile y SSLCertificateKeyFile.

En la opción SSLCertificateKeyFile podemos utilizar el archivo “privateserver.key, sin embargo cada vez que reinicias el servidor te va a pedir que escribas la “frase“. Esto recomendado cuando hay que cubrir cuestiones de seguridad, pero si no quieres andar escribiendola cada vez que reninicias el server es mejor que utilices el archivo “privateserver.pem“.

Nota: en windows debes escribir las rutas con el nombre de la unidad como “C:\etc\oz\privateserver.pem“.

Reinicias el servidor:

service apache2 restart

Ingresas al browser y te mostrará el mensaje de advertencia que el sitio no es de confianza:

Para que el sitio o el servicio sea valido debemos entregar el certificado a todos los clientes, en este caso nuestro browser para ello vamos a mostrar como se importa el archivo “privateserver.crt“.

5. Instalar el certficado en el browser

Google Chrome

Te vas a Opciones > Configuración > Opciones Avanzadas> HTTPS / SSL > Administrar cetificados :

Selecionas Autoridades e importas el certificado “privateserver.crt” y aceptas todas las opciones del certificado:

Y ahora entras al dominio https://private.domain.com y verás el sitio validado:

Firefox

Abres las opciones del browser en la sección Avanzado > Cifrado > Ver certificado > Autoridades. Seleccionas importar y tomas el archivo “rootCA.crt“.

Aceptas todas las validaciones del Certificado y luego OK:

Ahora entras al dominio https://private.domain.com y verás el certificado activo:

Internet Explorer

Herramientas > Opciones de Seguridad > Contenido > Certificados >Entidades de Certificación raíz de confianza, seleccionas importar y tomas el archivo “privateserver.crt” , te va a salir un mensaje de advertencia:

Ahora si ingresas a la dirección https://private.domain.com te mostrará que el sitio ya se encuentra validado:

Nota: si tienes problemas al gestionar tus certificados en windows puedes utilizar el administrador de certificados (Inicio > ejecutar > certmgr.msc) inche windows ¬¬!!

Saludos!

Referencias

2 comentarios en “Apache, Instalar Certificado de Seguridad Privado

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s