Crear y utilizar ensamblados con nombre seguro

Un nombre seguro se compone de la identidad del ensamblado, es decir, de su nombre de texto simple, número de versión e información sobre referencia cultural (si se proporciona), más una clave pública y una firma digital. Se genera de un archivo de ensamblado mediante la clave privada correspondiente. El archivo de ensamblado contiene el manifiesto del ensamblado, que contiene los nombres y códigos hash de todos los archivos que forman el ensamblado.

Un ensamblado con nombre seguro sólo puede utilizar tipos de otros ensamblados con nombre seguro. De lo contrario, se pondría en peligro la seguridad del ensamblado con nombre seguro.

Esta información general contiene las siguientes secciones:

  • Escenario de nombre seguro

  • Omitir la comprobación de firmas de ensamblados de confianza

  • Temas relacionados

Escenario de nombre seguro

El siguiente escenario describe el proceso de firma de un ensamblado con un nombre seguro y de hacer, posteriormente, referencia a él con ese nombre.

  1. El ensamblado A se crea con un nombre seguro mediante uno de los métodos siguientes:

    • Utilizando un entorno de desarrollo que permita la creación de nombres seguros, como Visual Studio 2005

    • Creando un par de claves criptográficas mediante la herramienta Strong Name (Sn.exe) y asignando ese par de claves al ensamblado a través de un compilador de línea de comandos o la herramienta Assembly Linker (Al.exe). El Kit de desarrollo de software de Windows (SDK) proporciona Sn.exe y Al.exe.

  2. El entorno de programación o la herramienta firman el código hash del archivo que contiene el manifiesto del ensamblado con la clave privada del programador. Esta firma digital se guarda en el archivo ejecutable portable (PE) que contiene el manifiesto del ensamblado A.

  3. El ensamblado B es un consumidor del ensamblado A. La sección de referencia del manifiesto del ensamblado B contiene un token que representa la clave pública del ensamblado A. Un símbolo es una parte de la clave pública y se usa en lugar de la propia clave para ahorrar espacio.

  4. Common Language Runtime comprueba la firma del nombre seguro cuando se ubica el ensamblado en la caché global de ensamblados. Al enlazar mediante nombre seguro en tiempo de ejecución, Common Language Runtime compara la clave almacenada en el manifiesto del ensamblado B con la clave utilizada para generar el nombre seguro del ensamblado A. Si se superan las comprobaciones de seguridad de .NET Framework y el enlace se realiza correctamente, el ensamblado B tiene la garantía de que los bits del ensamblado A no se han manipulado y que estos bits proceden realmente de los desarrolladores del ensamblado A.

NotaNota

Este escenario no se ocupa de los aspectos de confianza.Los ensamblados pueden llevar firmas completas de Microsoft Authenticode además de un nombre seguro.Las firmas de Authenticode incluyen un certificado que establece la confianza.Es importante recordar que los nombres seguros no requieren que el código se firme de esta forma.De hecho, las claves utilizadas para generar la firma del nombre seguro no tienen que ser las mismas que se utilizan para generar una firma de Authenticode.

Volver al principio

Omitir la comprobación de firmas de ensamblados de confianza

A partir de .NET Framework versión 3.5 Service Pack 1, las firmas con nombre seguro no se validan cuando un ensamblado se carga en un dominio de aplicación de plena confianza, como el dominio de aplicación predeterminado de la zona MyComputer. Esto es lo que se denomina característica de omisión de nombres seguros. En un entorno de plena confianza, las peticiones de StrongNameIdentityPermission siempre se realizan correctamente en los ensamblados firmados de plena confianza, independientemente de su firma. La característica de omisión de nombres seguros evita la sobrecarga innecesaria que supone la comprobación de firmas del nombre seguro de los ensamblados de plena confianza en esta situación, lo que permite que los ensamblados se carguen con mayor rapidez.

La característica de omisión se aplica a cualquier ensamblado que esté firmado con un nombre seguro y que tenga las siguientes características:

  • Sea de plena confianza y no tenga la evidencia StrongName (que tenga, por ejemplo, la evidencia de zona MyComputer).

  • Esté cargado en un objeto AppDomain de plena confianza.

  • Se haya cargado desde una ubicación situada bajo la propiedad ApplicationBase de ese objeto AppDomain.

  • No se haya firmado con retraso.

Esta característica puede deshabilitarse en aplicaciones concretas o en un equipo. Vea Cómo: Deshabilitar la característica de omisión de nombres seguros.

Volver al principio

Temas relacionados

Título

Descripción

Cómo: Crear un par de claves privada y pública

Describe cómo se crea un par de claves criptográficas para firmar un ensamblado.

Cómo: Firmar un ensamblado con un nombre seguro

Describe cómo se crea un ensamblado con nombre seguro.

Cómo: Hacer referencia a un ensamblado con nombre seguro

Describe cómo hacer referencia a tipos o recursos en un ensamblado con nombre seguro en tiempo de compilación o en tiempo de ejecución.

Cómo: Deshabilitar la característica de omisión de nombres seguros

Describe cómo deshabilitar la característica que omite la validación de firmas de nombre seguro. Esta característica puede estar deshabilitada para todas las aplicaciones o para aplicaciones concretas.

Crear ensamblados

Proporciona información general sobre ensamblados de un único archivo y de varios archivos.

Cómo: Retrasar la firma de un ensamblado (Visual Studio)

Explica cómo firmar un ensamblado con un nombre seguro después de haber creado el ensamblado.

Sn.exe (Herramienta de nombre seguro)

Describe la herramienta incluida en .NET Framework que ayuda a crear ensamblados con nombres seguros. Esta herramienta proporciona opciones para la administración de claves, así como para la generación y comprobación de firmas.

Al.exe (Assembly Linker)

Describe la herramienta incluida en .NET Framework que genera un archivo que tiene un manifiesto de ensamblado de módulos o de archivos de recursos.

Volver al principio