jueves, 19 de enero de 2012

Firmar Una Libreria Con Nombre Seguro

Hoy tuve que realizar la firma de dll debido a un problema que tuve al publicar un aplicacion a traves de ClickOnce, aunque no soluciono mi problema(No quiere decir que no sea util esta informacion), aprendi como se firma una dll con un nombre seguro, a traves de la herramienta "sn.exe" de Visual Studio.

Antes que nada es necesario que entendamos para que se firma una libreria u componente en una aplicacion:

"La firma de nombre seguro o nombre seguro, proporciona a un componente de software una identidad única y global, que no puede ser suplantada por nadie. Los nombres seguros se utilizan para garantizar que las dependencias de componente e instrucciones de configuración se asignen con precisión al componente y versión de componente correctos." MSDN

  • Cuando utilizar un nombre seguro? Cuando un componente sea una libreria u otro, se va a prestar para un servicio publico a otras aplicaciones, es recomendable que tenga un firma con nombre seguro, es decir que una libreria puede ser usada por varias aplicaciones o es compartida, por lo general esto ocurre con librerias del sistema o publicas. 
  • Cuando no utilizar un nombre seguro?  Es recomendable que los ejecutables no tengan un nombre seguro, ya que por lo general los exe hacen referencia a varias librerias que por lo general puede que no esten firmadas con nombre seguro, lo cual impide que estas referencias se hagan.

Si se desea obtener mas informacion sobre los nombres seguros pueden acceder a este link donde hay una explicacion directa sobre este tema por parte del MSDN, bueno ahora si directamente a el procedimiento para firmar una libreria, existe un procedimiento un poco mas visual a traves de Visual Studio que lo pueden ver aqui pero para esta entrada lo explicare por linea de comandos como lo aprendi ("MiLibreria" se refiere a la libreria a la que deseo firmar con nombre seguro):


1. Abrir la linea de comandos de Visual Studio:

2.Ubicarse en el directorio donde se encuentra la librera a firmar, para esto dentro del editor de comandos tecleamos el comando: 
>cd "C:\DirectorioDeMiLibreria"

3.Una vez ubicados en el directorio debemos crear la firma con el nombre seguro, para esto ejecutamos el comando sn que es el permite realizar el trabajo con los nombres seguros, entonces ejecutamos : 
>sn -k MiLibreria.snk  (El archivo de llave no necesariamente tiene que ser el mismo de la libreria)

4.El resultado debe ser "Par de Claves escrito en "MiLibreria.snk", una ves tengamos el archivo de clave denemos quitar la firma que tenga el archivo actualmente, para esto utilizamos el siguiente comando:
>ildasm MiLibreria.dll /out:MiLibreria.il

5.Luego reensamblamos el archivo usando la clave de nombre seguro que creamos ejecutando:
>ilasm MiLibreria.il /res:MiLibreria.res /dll /key:MiLibreria.snk /out:MiLibreria.dll

6.Una vez termine el proceso debe aparecer un mensaje como "Operation Completed Successfully", luego de esto verificamos que la libreria  esta firmada apropiadamente nuevamente utilizando sn.exe:
>sn -vf MiLibreria.dll

Nos debe mostrar el mensaje "El ensablado MiLibreria.dll es valido", asi logramos que nuestra libreria este firmada con un nombre seguro. Gracias a Athar Anis a quien lei para recibir orientacion para esto y tambien a MSDN donde entendi mas sobre los nombres seguros.

Saludos

2 comentarios:

  1. uffff excelente ayuda , tenia una librería que generar un código QR , la cual no tenia un nombre seguro, y la tenia que integrar aun proyecto que debía estar firmado, con esta grana ayuda pude firmar la DLL sin tener el código fuente. gracias.

    ResponderEliminar