Cómo: Utilizar la firma total para asignar un nombre seguro a un ensamblado dinámico

A un ensamblado dinámico se le puede asignar un nombre seguro con firma parcial o firma total. En el caso de la firma parcial, debe especificarse la clave pública en el objeto AssemblyName que se pasa al método DefineDynamicAssembly. Common Language Runtime asigna espacio para un objeto binario de firma de nombre seguro en el archivo ejecutable portable (PE), pero en realidad no firma el ensamblado. El ensamblado obtenido se puede firmar totalmente en un paso de procesamiento posterior mediante las herramientas proporcionadas en Kit de desarrollo de software de Windows (SDK).

En el caso de la firma total, se debe proporcionar un par de claves pública y privada. Normalmente, estas entidades se almacenan en un archivo o en un disco, o en un contenedor de claves que pertenezca a un proveedor de servicios criptográficos (CSP) Crypto API. Los CSP de software suelen generar claves de seguridad baja y después las exportan a un archivo de manera que puedan comprobarse en los sistemas de administración de código fuente durante el desarrollo de proyectos. Con frecuencia, las claves de seguridad alta suelen ser generadas por hardware que ayuda a impedir la exportación de claves por razones de seguridad. El acceso a dichos pares de claves sólo es posible de manera indirecta, a través de un contenedor de claves. El par de claves de nombre seguro se especifica mediante la clase System.Reflection.StrongNameKeyPair.

En el ejemplo siguiente se muestra el uso de la firma completa para proporcionar un nombre seguro a un ensamblado dinámico.

Ejemplo

Imports System
Imports System.IO
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit

Class SNKToAssembly
    Public Shared Sub Main()
        Dim fs As New FileStream("SomeKeyPair.snk", FileMode.Open)
        Dim kp As New StrongNameKeyPair(fs)
        fs.Close()
        Dim an As new AssemblyName()
        an.KeyPair = kp
        Dim appDomain As AppDomain = Thread.GetDomain()
        Dim ab As AssemblyBuilder = _
            appDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.RunAndSave)
    End Sub
End Class
' Construct a StrongNameKeyPair object. This object should obtain 
' the public key from the Company.keys file.
Dim k As Reflection.StrongNameKeyPair = _
    New Reflection.StrongNameKeyPair(fs)
using System;
using System.IO;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;

class SNKToAssembly
{
    public static void Main()
    {
        FileStream fs = new FileStream("SomeKeyPair.snk", FileMode.Open);
        StrongNameKeyPair kp = new StrongNameKeyPair(fs);
        fs.Close();
        AssemblyName an = new AssemblyName();
        an.KeyPair = kp;
        AppDomain appDomain = Thread.GetDomain();
        AssemblyBuilder ab = appDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.RunAndSave);
    }
}
// Construct a StrongNameKeyPair object. This object should obtain
// the public key from the Company.keys file.
StrongNameKeyPair k = new StrongNameKeyPair(fs);
using namespace System;
using namespace System::IO;
using namespace System::Threading;
using namespace System::Reflection;
using namespace System::Reflection::Emit;

ref class SNKToAssembly
{
public:
    static void Main()
    {
        FileStream^ fs = gcnew FileStream("SomeKeyPair.snk", FileMode::Open);
        StrongNameKeyPair^ kp = gcnew StrongNameKeyPair(fs);
        fs->Close();
        AssemblyName^ an = gcnew AssemblyName();
        an->KeyPair = kp;
        AppDomain^ appDomain = Thread::GetDomain();
        AssemblyBuilder^ ab = appDomain->DefineDynamicAssembly(an, AssemblyBuilderAccess::RunAndSave);
    }
};

int main()
{
   SNKToAssembly::Main();
}
// Construct a StrongNameKeyPair object. This object should obtain
// the public key from the Company.keys file.
StrongNameKeyPair^ k = gcnew StrongNameKeyPair(fs);

Vea también

Conceptos

Ensamblados con nombre seguro

Crear y utilizar ensamblados con nombre seguro

Otros recursos

Utilizar la emisión de la reflexión