Beispiel für die Assemblysignierung

Im folgenden Beispiel wird erläutert, wie eine signierte parallele Assembly generiert wird, die aus dem Assembly-Manifest, dem Überprüfungskatalog und den Assembly-Dateien besteht. Gemeinsam genutzte parallele Assemblys sollten signiert werden. Das Betriebssystem überprüft die Assembly-Signatur vor der Installation einer gemeinsam genutzten Assembly im globalen Parallelspeicher (WinSxS). Dies erschwert das Spoofing des Herausgebers der parallelen Assembly.

Beachten Sie, dass das Ändern der Assembly-Dateien oder des Inhalts des Manifests nach dem Generieren des Assembly-Katalogs den Katalog und die Assembly ungültig macht. Wenn Sie die Assembly-Dateien 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 Assembly-Dateien, dem Assembly-Manifest und der Zertifikatdatei, die Sie zum Signieren der Assembly verwenden. Die Zertifikatdatei muss 2048 Bit oder größer sein. Sie müssen kein vertrauenswürdiges Zertifikat verwenden. Das Zertifikat wird nur verwendet, um zu überprüfen, ob die Assembly beschädigt wurde.

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

Hier ist ein Beispiel für eine Manifestdatei mit dem Namen „MySampleAssembly.manifest“. MySampleAssembly enthält nur eine Datei, MYFILE.DLL. Beachten Sie, dass der Wert für das publicKeyToken-Attribut 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 dann das im Windows SDK bereitgestellte Hilfsprogramm Mt.exe aus. Die Assembly-Dateien müssen sich im selben Verzeichnis wie das Manifest befinden. In diesem Beispiel ist dies das Verzeichnis „MySampleAssembly“. Rufen Sie Mt.exe für das Beispiel wie folgt auf:

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

So sieht das Beispielmanifest aus, nachdem Mt.exe ausgeführt wurde. Beachten Sie, dass das Ausführen von Mt.exe mit der Hashupdate-Option 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 mit dem Namen 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-Datei 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 vorher zum Generieren des öffentlichen Schlüsseltokens verwendet wurde. 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 authentifizierte digitales Zertifikat verfügen und Ihre Zertifizierungsstelle das PVK-Dateiformat zum Speichern des privaten Schlüssels verwendet, können Sie den Import des Schlüssels in Ihren kryptografischen Dienstanbieter (CSP) mithilfe von PVK Digital Certificate Files Importer (pvkimprt.exe) importieren. Mit diesem Hilfsprogramm können Sie Exporte in das Branchenstandardformat von PFX/P12 durchführen.

Siehe auch Erstellen signierter Dateien und Kataloge.