Beispiel für die Assemblysignierung

Im folgenden Beispiel wird erläutert, wie eine parallel signierte Assembly generiert wird, die aus dem Assemblymanifest, dem Überprüfungskatalog und den Assemblydateien besteht. Gemeinsam genutzte parallele Assemblys sollten signiert werden. Das Betriebssystem überprüft die Assemblysignatur, bevor eine freigegebene Assembly im globalen parallelen Speicher (WinSxS) installiert wird. Dies macht es schwierig, den Herausgeber der parallelen Assembly zu spoofen.

Beachten Sie, dass das Ändern der Assemblydateien oder des Manifestinhalts nach dem Generieren des Assemblykatalogs den Katalog und die Assembly ungültig macht. Wenn Sie die Assemblydateien oder das Manifest nach dem Erstellen und Signieren des Katalogs aktualisieren müssen, müssen Sie die Assembly erneut signieren und einen neuen Katalog generieren.

Beginnen Sie mit den Assemblydateien, dem Assemblymanifest und der Zertifikatdatei, die Sie zum Signieren der Assembly verwenden. Die Zertifikatdatei muss mindestens 2048 Bit aufweisen. Sie müssen kein vertrauenswürdiges Zertifikat verwenden. Das Zertifikat wird nur verwendet, um zu überprüfen, ob die Assembly nicht beschädigt wurde.

Führen Sie das im Microsoft Windows Software Development Kit (SDK) bereitgestelltePktextract.exe-Hilfsprogramm aus, um das öffentliche Schlüsseltoken aus der Zertifikatdatei zu extrahieren. Damit Pktextract ordnungsgemäß funktioniert, muss sich die Zertifikatdatei im selben Verzeichnis wie das Hilfsprogramm befinden. Verwenden Sie den extrahierten Öffentlichen Schlüsseltokenwert, um das publicKeyToken-Attribut des assemblyIdentity-Elements in der Manifestdatei zu aktualisieren.

Hier sehen Sie ein Beispiel für eine Manifestdatei mit dem Namen MySampleAssembly.manifest. Die MySampleAssembly-Assembly enthält nur eine Datei, MYFILE.DLL. Beachten Sie, dass der Wert für das attribut publicKeyToken des assemblyIdentity-Elements mit dem Wert des Öffentlichen Schlüsseltokens aktualisiert wurde.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity 
        type="win32" 
        name="Microsoft.Windows.MySampleAssembly" 
        version="1.0.0.0" 
        processorArchitecture="x86"         
        publicKeyToken="0000000000000000"/>
    <file name="myfile.dll"/>
</assembly>

Führen Sie als Nächstes das im Windows SDK bereitgestellteMt.exe-Hilfsprogramm aus. Die Assemblydateien müssen sich im selben Verzeichnis wie das Manifest befinden. In diesem Beispiel ist dies das Verzeichnis MySampleAssembly. Rufen Sie für das Beispiel Mt.exe wie folgt auf:

C:\ MySampleAssembly>mt.exe -manifest MySampleAssembly.manifest -hashupdate -makecdfs

Hier erfahren Sie, wie das Beispielmanifest nach der Ausführung Mt.exe. Beachten Sie, dass die Ausführung Mt.exe mit der Option hashupdate den SHA-1-Hash der Datei hinzufügt. Ändern Sie diesen Wert nicht.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity 
        type="win32" 
        name=" Microsoft.Windows.MySampleAssembly" 
        version="1.0.0.0" 
        processorArchitecture="x86"         
        publicKeyToken="0000000000000000"/>
    <file name="myfile.dll"
hash="a1d362d6278557bbe965a684ac7adb4e57427a29" hashalg="SHA1"/>
</assembly>

Wenn Sie Mt.exe mit der Option -makecdfs ausführen, wird eine Datei namens MySampleAssembly.manifest.cdf generiert, die den Inhalt des Sicherheitskatalogs beschreibt, der zum Überprüfen des Manifests verwendet wird.

Der nächste Schritt besteht darin, Makecat.exe über diese CDF auszuführen, um den Sicherheitskatalog für die Assembly zu erstellen. Der Aufruf von Makecat.exe für dieses Beispiel würde wie folgt aussehen:

c:\MySampleAssembly>makecat MySampleAssembly.manifest.cdf

Der letzte Schritt besteht darin, SignTool.exe auszuführen, um die Katalogdatei mit dem Zertifikat zu signieren. Dies sollte dasselbe Zertifikat sein, das im vorherigen verwendet wurde, um das öffentliche Schlüsseltoken zu generieren. Weitere Informationen zu SignTool.exe finden Sie im Thema SignTool . Der Aufruf von SignTool für das Beispiel würde wie folgt aussehen:

c:\MySampleAssembly>signtool sign /f <fullpath>mycompany.pfx /du https://www.mycompany.com/MySampleAssembly /t https://timestamp.digicert.com MySampleAssembly.cat

Wenn Sie über ein authentifiziertes digitales Zertifikat verfügen und Ihre Zertifizierungsstelle das PVK-Dateiformat verwendet, um den privaten Schlüssel zu speichern, können Sie den PVK Digital Certificate Files Importer (pvkimprt.exe) verwenden, um den Schlüssel in Ihren Kryptografiedienstanbieter (CSP) zu importieren. Mit diesem Hilfsprogramm können Sie in das Branchenstandardformat PFX/P12 exportieren. Weitere Informationen zum PVK Digital Certificate Files Importer finden Sie im Abschnitt Bereitstellungsressourcen der MSDN-Bibliothek, oder wenden Sie sich an Ihre Zertifizierungsstelle.

Weitere Informationen finden Sie unter Erstellen signierter Dateien und Kataloge.