miércoles, 4 de diciembre de 2013

Receta C# No. 1-12: Firmar un Assembly con Firma Digital de Authenticode

Tabla de Contenido

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

0. Introducción

Con la introducción de Internet en el quehacer diario muchas tecnologías de seguridad han ido apareciendo según el problema o la necesidad de las organizaciones, y desde luego, desde los mismos usuarios. En particular, una tecnología de Internet relacionada con la autenticidad de un servicio, o para este caso en sí, de un assembly parte de una aplicación en la Web, es la firma digital basada en Authenticode.

1. Problema

Los usuarios de nuestros assemblies han solicitado un mecanismo de autenticación que valide que los artefactos que ellos reciben son de nuestra autoría. En particular, se requiere estrictamente el uso de la tecnología Authenticode [1].

2. Solución

La solución a este problema consiste básicamente en el uso de la herramienta signtool.exe [2] y la obtención de un certificado por medio de una entidad específica.

3. Discusión

En las últimas 4 recetas hemos usado los nombres seguros para crear una identidad única para los assemblies que desarrollemos. Esto técnica también nos ha permitido crear una prueba sobre la integridad del assembly. Hay que aclarar que este mecanismo no cubre la necesidad de autenticidad del publicador; sin embargo, .NET nos permite utilizar la tecnología Authenticode que permite al desarrollador demostrar su autoría e identificación al público (e.g., en el servicio de pagos electrónicos).

Lo primero que debemos de realizar es adquirir un SPC [3] (validación de la autenticidad de un assembly) (recomiendo la lectura del artículo en [3]). En la siguiente receta (Receta C# No. 1-13) veremos cómo obtener un certificado de prueba.

Cuando la entidad certificadora apruebe nuestra solicitud, nos será entregado un archivo con sufijo .pfx (Personal Information Exchange) [5]. A partir de este archivo podremos firmar nuestros assemblies. Vale aclarar que algunas entidades de certificación expiden dos archivos: .pvk (private key file), o .spc, y el archivo de certificado -.cer-. Cuando esto ocurra, es necesario realizar la conversión al formato PFX.

Una vez tengamos el archivo con extensión .pfx pasamos a usar Sign Tool [2] para la firma del assembly con la tecnología Authenticode.

4. Uso de la Solución

4.1 Conversión

El proceso de conversión será necesario en el caso de haber recibido archivos distintos a uno con extensión .pfx. Para este cometido usaremos la herramienta de conversión pnk2pfx.exe:

4.1.1 .cer a .pfx

4.1.2 .spc a .pfx



Vimos en los dos puntos anteriores como obtener un archivo
.pfx; ahora es el momento de firmar el assembly:


5. Conclusiones

Hemos aprendido cómo firmar un assembly para demostrar nuestra autoría frente al usuario. Entendimos el concepto de la tecnología Authenticode. Al final descubrimos el uso de la herramienta de conversión pvk2pfx para la conversión de archivos de llave privada y certificado.

6. Glosario

  • Certificado
  • Entidad de Certificación
  • SPC

7. Enlaces & Literatura

[1]: Authenticode - http://technet.microsoft.com/en-us/library/cc750035.aspx
[2]: SignTool.exe (Sign Tool) - http://msdn.microsoft.com/en-us/library/8s9b9yaz(v=vs.110).aspx
[3]: Software Publishers Certificates Explained - Certificate Authority Price List - http://www.softwarepublishercertificate.com/#What-is-a-software-publisher-certificate-?
[4]: Getting a Software Publisher Certificate - http://msdn.microsoft.com/en-us/library/aewdt4xt(v=vs.90).aspx
[5]: PKCS 12 - Wikipedia, the free encyclopedia - http://en.wikipedia.org/wiki/PKCS_12


J

2 comentarios:

  1. John, que tal?

    Interesante articulo, pero me quedan dos dudas:

    1. Qué pasa si se utiliza un certificado autofirmado, a los efectos de validar la firma carece de valor, pero la integridad del código si se puede verificar no?

    2. Otra opción un para asegurar la integridad de assemblies en .net es el uso del sn.exe. Qué opinión tienes al respecto?

    ResponderEliminar
  2. Hola,

    -----

    Empiezo por el segundo punto: En la receta:

    http://ortizol.blogspot.com/2013/10/r1-9-asignar-un-nombre-seguro-un.html

    hablo sobre el uso de la utilidad de nombre seguro -sn.exe- desde un contenedor de llaves. Con esto «gano» la autencidad de la procedencia de los assemblies.

    En mi opinión, considero que es un mecanismo básico y útil para la generación de assemblies 'seguros'. Además, de que a través de la postergación de firmado, tomo control sobre lo que se debe entregar: el assembly seguro.

    -----
    En cuanto al punto 1, sinceramente me toca que ahondar en detalles (y gracias por generar aún más cuestiones sobre este asunto de certificados). Lo tendré en cuanta para una entrega futura (estas cosas no se me olvidan).
    -----

    Gracias por su visita a mi blog.

    Saludos,

    ResponderEliminar

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