Retrasar la firma de un ensamblado

Una organización puede tener un par de claves muy bien guardado al que los programadores no tiene acceso todos los días. La clave pública está disponible con frecuencia, pero la clave privada está restringida sólo a algunas personas. Al programar ensamblados con nombre seguro, cada ensamblado que hace referencia al ensamblado con nombre seguro de destino contiene el símbolo de la clave pública que se usa para dar al ensamblado de destino un nombre seguro. Ello requiere que la clave pública esté disponible durante el proceso de programación.

Se puede usar el retraso de firma o firma parcial en tiempo de generación para reservar espacio en el archivo ejecutable portable (PE) para la firma de nombre seguro, pero la firma en sí se retrasa hasta más adelante, normalmente justo antes del envío del ensamblado.

Los pasos siguientes describen el proceso de retraso de la firma de un ensamblado:

  1. Obtenga la parte de clave pública del par de claves de la organización que, en su momento, llevará a cabo la firma. Normalmente, esta clave es un archivo .snk, que se puede crear con la herramienta Nombre seguro (Sn.exe) que proporciona .NET Framework SDK.

  2. Agregue al código fuente del ensamblado dos atributos personalizados de System.Reflection:

    • AssemblyKeyFileAttribute, que pasa el nombre del archivo que contiene la clave pública como parámetro a su constructor.

    • AssemblyDelaySignAttribute, que indica que se va a utilizar el retraso de firma pasando true como parámetro a su constructor. Por ejemplo:

          <Assembly:AssemblyKeyFileAttribute("myKey.snk")>
          <Assembly:AssemblyDelaySignAttribute(true)>
      
          [assembly:AssemblyKeyFileAttribute("myKey.snk")]
          [assembly:AssemblyDelaySignAttribute(true)]
      
  3. El compilador inserta la clave pública en el manifiesto del ensamblado y reserva espacio en el archivo PE para la firma de nombre seguro completa. La clave pública auténtica se debe guardar mientras se genera el ensamblado para que otros ensamblados que hagan referencia a éste puedan obtenerla y guardarla en su propia referencia al ensamblado.

  4. Como el ensamblado no tiene una firma de nombre seguro válida, hay que desactivar la comprobación de esa firma. Esto se hace utilizando la opción –Vr con la herramienta Nombre seguro.

    En el ejemplo siguiente se desactiva la comprobación para un ensamblado denominado myAssembly.dll.

    sn –Vr myAssembly.dll
    
    Caution notePrecaución

    Utilice la opción -Vr sólo durante la programación. Al agregar un ensamblado a la lista de omisiones de comprobación se produce una vulnerabilidad en la seguridad. Puede que un ensamblado malicioso utilice el nombre completo especificado (nombre de ensamblado, versión, referencia cultural y símbolo de clave pública) del ensamblado existente en la lista de omisiones de comprobación para imitar su identidad. Esto permitiría que el ensamblado malicioso se pasase también por alto durante la comprobación.

  5. Posteriormente, por lo general justo antes del envío, el ensamblado se entrega a la autoridad de firma de la organización para que lleve a cabo la firma de nombre seguro propiamente dicha, utilizando la opción –R con la herramienta Nombre seguro.

    En el ejemplo siguiente se firma el ensamblado myAssembly.dll con un nombre seguro utilizando el par de claves sgKey.snk.

    sn -R myAssembly.dll sgKey.snk
    

Vea también

Tareas

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

Referencia

Herramienta de nombre seguro (Sn.exe)

Conceptos

Crear ensamblados

Otros recursos

Programar con ensamblados