lunes, 7 de junio de 2010

Creación de certificados

En la primera entrada explique los conceptos básicos de certificados, que son y para que se utilizan. Esta entrada se va a encargar de explicar como crear dichos certificados mediante la herramienta makecert del SDK de Windows (también utilizaremos pvk2pfx.exe para convertir formatos de certificados). Esta herramienta tiene muchas opciones, pero aquí solo explicaremos las mas basicas para poder crear certificados de servidor (los que se utilizan para SSL en https) y de cliente (utilizados para identificar a los clientes). La ruta del SDK de Windows suele ser:

C:\Archivos de programa\Microsoft SDKs\Windows\v6.0A\bin

La descripción completa de makecert se puede encontrar en el siguiente enlace: descripción makecert.

Esta herramienta sirve para generar certificados. Sin embargo, para poder utilizar certificados en servicios, también es necesario instalarlos en las maquinas en las que se vayan a utilizar. Esto lo veremos en la siguiente entrada.

Como vimos en la entrada anterior, a la hora de emitir un certificado es necesario que una autoridad certificadora lo firme, para ello, nosotros vamos a funcionar como entidad certificadora, es decir, que seremos nosotros mismos los que demos validez a nuestros certificados.

De esta forma nos evitamos el tener que hacer una petición a una autoridad de certificación (con el consiguiente coste y la espera mientras nos gestionan el certificado), pero solo servirá para quienes quieran confiar en nosotros. Los escenarios adecuados son cuando se necesitan certificados para entornos de desarrollo o cuando los consumidores de los certificados nos conocen y por tanto confían en nosotros.

1. Generar un certificado para entidad certificadora.

Como acabamos de decir, el primer paso es crear un certificado para ser usado como entidad emisora raíz de confianza. El script necesario para crearlo es el siguiente:

makecert -n "CN=RootCA" -r -sv RootCA.pvk RootCA.cer

Al ejecutar el comando, aparecerán unas ventanas modales que solicitan una contraseña con la que se cifrará el fichero pvk y que se nos pedirá de nuevo cuando sea necesario leer el fichero. Por tanto será necesario apuntarla (para volver a introducirla cuando se nos pida) o utilizar siempre un mismo valor que sea fácil de recordar (por ejemplo: “1”). Esto es útil porque para cada certificado que queramos generar se nos pedirá una clave, aunque se puede comprometer la seguridad (por lo que puede no ser recomendable para certificados que no sean para entornos de Test).

El primer parametro (-n) identifica el nombre del certificado, en este caso RootCA, aunque podemos darle cualquier nombre que queramos, -r identifica que el certificado será firmado automáticamente (para poder actuar como entidad emisora raíz de confianza) y -sv identifica el nombre del fichero donde se va a almacenar la clave privada. Al final se indica el nombre del fichero de certificado que contiene solo la clave pública.

El resultado de este script son dos ficheros: RootCA.pvk y RootCA.cer. El fichero RootCA.pvk es necesario para poder generar los certificados (tanto de cliente como de servidor) y el fichero RootCA.cer es necesario para que poder conocer la cadena de confianza del certificado. Por lo tanto deberá estar instalado en las maquinas donde se vayan a utilizar los certificados.


2. Generar certificado de cliente.


El siguiente paso es generar e instalar el certificado de cliente. Nuevamente utilizaremos el comando makecert:

makecert -iv RootCA.pvk -n "CN=CertificadoCliente" -ic RootCA.cer -sky signature -pe -sv CertificadoCliente.pvk CertificadoCliente.cer

Nuevamente, aparecen las ventanas que piden un password. Procedemos como en el apartado anterior, por ejemplo, introducimos siempre el mismo, por ejemplo: “1”.

El primer argumento (-iv) indica la clave privada que se va a utilizar para firmar el certificado a generar (que es el fichero que hemos generado en el paso anterior), con el segundo (-n) se indica el nombre que vamos a dar al certificado que vamos a crear, con el tercero (-ic) el nombre del fichero de certificado que se utiliza como entidad certificadora, -pe marca el certificado como exportable, -sv indica el nombre del fichero de clave privada pvk que se va a generar y al final se indica el nombre del fichero .cer del certificado.

El resultado de este script es nuevamente dos ficheros: CertificadoCliente.pvk y CertificadoCliente.cer. Sin embargo, para instalar el certificado de cliente en las maquinas cliente y servidor, necesitamos el certificado en un formato distinto: .pfx (fichero de exportación de clave privada de certificados). Esto se consigue mediante la herramienta pvk2pfx, mediante el siguiente comando:

pvk2pfx -pvk CertificadoCliente.pvk -spc CertificadoCliente.cer -pfx CertificadoCliente.pfx -pi 1

El primer argumento (-pvk) indica el fichero de clave privada de origen, el segundo (-spc) argumento especifica el fichero que contiene el certificado, el tercero (-pfx) indica el nombre del fichero .pfx que se generará y el último (-pi) indica el valor de la clave para el fichero .pvk.

Nuevamente, en las ventanas que piden un password, introducimos siempre el mismo, por ejemplo: “1”.

El resultado es el fichero CertificadoCliente.pfx que debe ser instalado tanto en los clientes como en los servidores donde se vaya a instalar o acceder al servicio.

3. Generar certificado de servidor

El siguiente paso es crear e instalar el certificado de servidor (en las ventanas que aparecen pidiendo un password, introducimos siempre el mismo, por ejemplo: “1”):

makecert -iv RootCA.pvk -n "CN=NombreServidor" -ic RootCA.cer -pe -sv NombreServidor.pvk NombreServidor.cer

El comando es el mismo que para generar un certificado de cliente, salvo por el nombre del certificado y los nombres de los ficheros de certificado, lógicamente.

MUY IMPORTANTE: el nombre del certificado de servidor debe ser el nombre de la maquina donde se va a utilizar o su IP. Por ejemplo si se va a instalar en la maquina MAQUINA01, cuya IP sea 192.168.33.31 (según lo que se vaya a escribir en la url con la que accedamos al servicio, tal y como se ve en la imagen), deberemos escribir: "CN=MAQUINA01" o "CN=192.168.33.31". Esto es muy importante, porque al intentar acceder a la url se comprobará el nombre o IP de la maquina de la url con el del certificado y si no coincide se dará una advertencia de seguridad.

Para terminar, al igual que para el certificado de cliente, es necesario generar un fichero de exportación de clave privada de certificados (.pfx) para el certificado de servidor:

pvk2pfx -pvk NombreServidor.pvk -spc NombreServidor.cer -pfx NombreServidor.pfx -pi 1

Nuevamente el comando sigue siendo el mismo y solo varía el nombre del certificado.

4. Referencias

SDK de Windows
Descripción de Makecert.exe
Descripción de pvk2pfx

1 comentario: