miércoles, 9 de junio de 2010

Administración de certificados digitales en Windows

En la anterior entrada, vimos como crear certificados mediante comandos. Ahora tendremos que tratar con la gestión de dichos certificados en Windows, es decir, como instalarlos en el almacén de certificados del sistema, para que los servicios y los clientes puedan utilizarlos.

1. Almacén de certificados de Windows.

Windows utiliza como almacén de certificados del sistema el registro (dentro de HKEY_LOCAL_MACHINE o HKEY_LOCAL_USER en la ruta SOFTWARE\Microsoft\SystemCertificates\My\Certificates). Afortunadamente no es necesario tener que modificar manualmente el registro para instalar o quitar certificados, y estas tareas suelen realizarse a través de un complemento de la consola de administración (mmc). Los pasos a seguir para mostrar la consola con los certificados están en el siguiente enlace: Mostrar el visor de certificados.

Una alternativa al uso de esta consola es el uso de comandos (como hicimos para la generación de certificados).

Por ejemplo, la herramienta certmgr.exe que viene con el Windows SDK. Aunque esta herramienta no sirve por si sola, ya que, no permite la gestión de ficheros .pfx (los utilizados para distribuir la clave privada), para este tipo de ficheros utilizaremos otra herramienta: WinHttpCertCfg.

El almacén de certificados de Windows está organizado en categorías (personal, Entidades emisoras raíz de confianza, …) en función del propósito del certificado. Por tanto, a la hora de instalar los certificados, tendremos que tener en cuenta para que van a ser utilizados. Además, el almacén de certificados de Windows distingue entre certificados de la maquina local y los de la cuenta del usuario.

Cada certificado debe ser instalado de una forma, dependiendo del papel que vaya a realizar (si es una CA o no, si es certificado de cliente o servidor).

Una vez terminados todos los pasos, podemos utilizar la consola para comprobar que los certificados están instalados correctamente.

2. Instalar el certificado de CA como entidad raíz de confianza.

Este paso debe realizarse tanto en las maquinas cliente como en las maquinas de servidor. Para las maquinas de servidor hay que ejecutar el siguiente comando (se instala en la cuenta del equipo):

certmgr -add RootCA.cer -s -r localmachine root

Para las maquinas de cliente hay que ejecutar el siguiente comando (se instala en la cuenta del usuario):

certmgr -add RootCA.cer -s -r currentUser root

El argumento –add indica que se va a añadir el certificado indicado por el fichero que le sigue, el argumento –s indica que vamos a instalar el certificado en un almacén del sistema (esto es necesario para poder utilizar -r) y –r indica la localización en el registro de Windows (localmachine para HKEY_LOCAL_MACHINE y currentUser para HKEY_LOCAL_USER). Finalmente, el último argumento indica la ubicación donde se van a almacenar los certificados (dentro del almacén de certificados), en este caso, dado que es un certificado para ser utilizado como entidad raíz de confianza, ponemos root.


3. Instalar el certificado de cliente.

En las maquinas de cliente, se deberán instalar los certificados asociados a las cuentas de los usuarios que vayan a acceder al servicio mediante el script:

winhttpcertcfg -i CertificadoCliente.pfx -c CURRENT_USER\My -a NombreMaquina -p 1

-i indica el nombre del fichero de clave privada del certificado, –c la localización del registro donde se va a instalar (en este caso la cuenta del usuario), –a el nombre de la maquina y –p el password con el que se guardó el certificado (en nuestro ejemplo es: “1”).

Para instalar en las maquinas de servidor, es necesario cambiar la localización donde se va a instalar el certificado (en este caso la cuenta de la maquina), ya que el servidor desconoce cuales son las cuentas del usuario. Utilizaremos el siguiente script:

winhttpcertcfg -i CertificadoCliente.pfx -c LOCAL_MACHINE\My -a NombreMaquina -p 1

4. Instalar el certificado de servidor.

Este certificado solo es necesario instalarlo en la maquina de servidor, el script es muy similar al del caso anterior, solo cambia el nombre del fichero del certificado a instalar:

winhttpcertcfg -i NombreMaquina.pfx -c LOCAL_MACHINE\My -a NombreMaquina -p 1


5. Gestión con la consola.


Otra posibilidad es realizar estas operaciones manualmente mediante la consola. Para ello, hay que abrir la consola de gestión (mmc), para ello acceder al menú de Inicio, pulsar “Ejecutar” y escribir mmc. Se abre la consola, en el menú seleccionar “Archivo” e ir a “Agregar o quitar complemento”, se abre un cuadro de dialogo modal, pulsar el botón agregar para añadir el complemento de “Certificados”, se solicita el tipo de certificados que se quiere administrar (en este ejemplo: cuenta de usuario cuando se quiere utilizar CURRENT_USER o de equipo cuando se quiere utilizar LOCAL_MACHINE).


Para ver las entidades emisoras raíz de confianza, hay que acceder a la carpeta “Entidades emisoras raíz de confianza” (lo que corresponde al root del comando certmgr), mientras que para acceder a los certificados propios, hay que ir a la carpeta “Personal” (lo que corresponde a My del comando winhttpcertcfg).


6. Enlaces externos.


Mostrar el visor de certificados

Descripción de certmgr

Descarga de WinHttpCertCfg.

Descripción de WinHttpCertCfg

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