sábado, 15 de febrero de 2014

Receta No. 1-13 en C#: Creación de un SPC de Prueba para un Assembly con Authenticode

Tabla de Contenido

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
4. Uso de la Solución
5. Conclusiones
6. Glosario
7. Enlaces & Literatura

0. Introducción

En esta receta vamos a trabajar con un tema interesantísimo: la creación y la prueba de confianza de un assembly y de esta manera probar su firma de Authenticode. Los invito a hacer esta práctica. Desde luego es importante que revisen las recetas previas de la serie de seguridad, autenticidad, integridad: recetas 9 a 12.

1. Problema

Ya contamos con un assembly firmado con Authenticode [5] (tecnología que nos ayuda a autenticar y comprobar la integridad de código ejecutable sobre Internet), ahora a través de un SPC [5] necesitamos probar tal firma.

2. Solución

El primer paso a seguir es la creación de un certificado con tecnología X.509 [6][7]; el cual provee verificación de la identidad, protección de datos personales, criptografía asimétrica, entre otras características interesantes para la manejo de certificados. Para la generación del certificados vamos a utilizar la herramienta de creación de certificados Certificate Creation Tool makecert.exe [8]. También utilizaremos la herramienta pvk2pfx.exe para la generación del archivo PFX [9] (archivo de empaquetado de objetos de criptografía) a partir del certificado generado.

3. Discusión de la Solución

En esta sección vamos a discutir con más cuidado y detenimiento el próposito de las herramientas involucradas en el marco de la solución descrita en la sección previa.

3.1 makecert.exe

De acuerdo con [8], la herramienta makecert.exe nos permite generar certicados basados en la tecnología (estándar) X.509 únicamente para propósitos de prueba (afortunadamente es lo que nos conviene para esta receta). Puedo extraer literalmente esto de [8]:
It creates a public and private key pair for digital signatures and stores it in a certificate file. This tool also associates the key pair with a specified publisher's name and creates an X.509 certificate that binds a user-specified name to the public part of the key pair.
Sencillamente lo que sumarizamos, es que esta herramienta crea el par de llaves pública y privada para firmas digitales, y luego la almacena en un archivo de certificado (normalmente uno con extensión cer). Además, el par de llaves se asocia con el nombre del autoridad de certificados y el nombre de usuario al que se le concede el mismo.

Valo mencionar que esta herramienta provee una serie de switches (opciones) para alterar la forma de creación del certificado de prueba:
Switches comúnmente usados por la herramienta makecert.exe
Figura 1. Switches comúnmente usados por la herramienta makecert.exe [1].
En [11] encontramos una serie de ejemplos de uso de makecert para la demostración de distintos switches.

3.2 pvk2pfx.exe

Expongo textualmente la definición de esta herramienta desde [10]:
Pvk2Pfx (Pvk2Pfx.exe) is a command-line tool copies public key and private key information contained in .spc, .cer, and .pvk files to a Personal Information Exchange (.pfx) file.
En mi concepción: pvk2pfx.exe nos permite copiar la información de llave privada y pública desde dintos formatos de certificado (i.e.: .cer, .spc, pvk) a un archivo contenedor de información personal para intercambio pfx.

4. Uso de la Solución

Ahora sí manos a la obra. Vamos a crear el certificado por medio de la herramienta makecert.exe. Adicionalmente, vamos a escribir la llave privada a un archivo independiente.

4.1 Creación del certificado

El certificado que crearemos estará al publicador de software Juan Ortiz. Este certificado, como ya se mencionó, será generado a partir de la tecnología X.509. Esta es el comando que deberemos introducir en la línea de comandos (recomiendo el uso de Developer Command Prompt for VS2013 ó VS2012). Veamos:

  1. makecert -n "CN=Juan Ortiz" -sk MisLlaves CertificadoPrueba.cer

Y resultado que tendremos en pantalla:
Salida después de la creación del certificado.
Figura 2. Salida después de la creación del certificado.

En el sistema de archivos tendríamos:
Archivo CertificadoPrueba.cer en el sistema de archivos.
Figura 3. Archivo CertificadoPrueba.cer en el sistema de archivos.

4.2 Llave privada en archivo independiente (pvk)

Ejecutamos este comando:

  1. makecert -n "CN=Juan Ortiz" -sv LlavePrivada.pvk CertificadoPrueba.cer

Enseguida nos aparecerá un diálogo como este:
Creación de contraseña para la llave privada.
Figura 4. Creación de contraseña para la llave privada.
Donde nos solicita la contraseña para la llave privada. Lo recomendable es asignar una, sin embargo podemos dejar vacía dando clic en el botón 'None'.

Resultados:

1. Ejecución de comando:
Ejecución de makecert para la generación de archivo con llave privada.
Figura 5. Ejecución de makecert para la generación de archivo con llave privada.
2. Archivos generados:
Archivo de certificado y llave privada.
Figura 6. Archivo de certificado y llave privada.

4.3 Conversión del archivo cer a pfx

Este paso realmente depende de la subsección anterior (4.2). Tendremos que ejecutar el siguiente comando:


  1. pvk2pfx -pvk LlavePrivada.pvk -spc CertificadoPrueba.cer CertificadoPrueba.pfx

Apenas lo ejecutemos, nos solicitará la contraseña del archivo de llave privada:
Solicitud de contraseña de la llave privada.
Figura 7. Solicitud de contraseña de la llave privada.
Especificamos la contraseña y la conversión se realizará satisfactoriamente.
Archivo pfx generado.
Figura 8. Archivo pfx generado.

Conclusiones

Hemos aprendido a crear certificados utilizando la utilidad makecert.exe (Certificate Creation Tool). Éstos certificados nos sirve para sólamente para pruebas. Básicamente para la verificación de la firma de un assembly con Authenticode. Esto nos será de utilidad para un entorno de pruebas.

Glosario

- Criptografía
- Llave privada
- Llave pública

Enlaces & Literatura

[1]: Visual C# 2010 Recipes by Allen Jones and Adam Freeman. Copyright 2010 Allen Jones and Adam Freeman, 978-1-4302-2525-6.
[2]: Getting a Software Publisher Certificate - http://msdn.microsoft.com/en-us/library/aewdt4xt%28v=vs.90%29.aspx
[3]: What are certificates? - YouTube - http://www.youtube.com/watch?v=LRMBZhdFjDI
[4]: Authenticode - http://technet.microsoft.com/en-us/library/cc750035.aspx
[5]: Software Publishers Certificates Explained - Certificate Authority Price List - http://softwarepublishercertificate.com/#What-is-a-software-publisher-certificate-?
[6]: X.509 - Wikipedia, the free encyclopedia - https://en.wikipedia.org/wiki/X.509
[7]: What is an X.509 Certificate? | Stormpath - http://www.stormpath.com/blog/what-x509-certificate
[8]: Makecert.exe (Certificate Creation Tool) - http://msdn.microsoft.com/en-us/library/bfsktky3%28v=vs.110%29.aspx
[8]: PKCS 12 - Wikipedia, the free encyclopedia - https://en.wikipedia.org/wiki/PKCS_12
[9]: Digital signature - Wikipedia, the free encyclopedia - https://en.wikipedia.org/wiki/Digital_signature
[10]: Pvk2Pfx (Windows Drivers) - http://msdn.microsoft.com/en-us/library/windows/hardware/ff550672%28v=vs.85%29.aspx
[11]: Using MakeCert (Windows) - http://msdn.microsoft.com/en-us/library/windows/desktop/aa388165%28v=vs.85%29.aspx
[12]: Using Makecert to Create Certificates for Development | DigitallyCreated - http://www.digitallycreated.net/Blog/38/using-makecert-to-create-certificates-for-development


M

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.