Beispiel für die Assemblysignierung

Im folgenden Beispiel wird erläutert, wie sie eine signierte nebenseitige Assembly aus dem Assemblymanifest, dem Überprüfungskatalog und den Assemblydateien generieren. Gemeinsam genutzte nebenseitige Assemblys sollten signiert werden. Das Betriebssystem überprüft die Assemblysignatur vor der Installation einer freigegebenen Assembly im globalen Querspeicher (WinSxS). Dies macht es schwierig, den Herausgeber der querseitigen Assembly zu spoofen.

Beachten Sie, dass das Ändern der Assemblydateien oder der Inhalt des Manifests nach dem Generieren des Assemblykatalogs den Katalog und die Assembly ungültig macht. Wenn Sie die Assemblydateien oder -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 2048 Bit oder größer sein. Sie müssen kein vertrauenswürdiges Zertifikat verwenden. Das Zertifikat wird nur verwendet, um sicherzustellen, dass die Assembly nicht beschädigt wurde.

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

Hier ist ein Beispiel für eine Manifestdatei namens MySampleAssembly.manifest. Die MySampleAssembly-Assembly 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 als Nächstes dasMt.exe-Hilfsprogramm aus, das im Windows SDK bereitgestellt wird. Die Assemblydateien müssen sich im gleichen 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

Hier erfahren Sie, wie das Beispielmanifest nach dem Ausführen von Mt.exe aussieht. Beachten Sie, dass das Ausführen von Mt.exe mit der Hashupdateoption 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 an Makecat.exe für dieses Beispiel wird wie folgt angezeigt:

c:\MySampleAssemblymakecat> MySampleAssembly.manifest.cdf

Der letzte Schritt besteht darin, SignTool.exe auszuführen, um die Katalogdatei mit dem Zertifikat zu signieren. Dies sollte das gleiche Zertifikat sein, das im vorherigen Verwendet wurde, um das öffentliche Schlüsseltoken zu generieren. Weitere Informationen zu SignTool.exe finden Sie im SignTool-Thema . Der Aufruf an SignTool für das Beispiel wird wie folgt angezeigt:

c:\MySampleAssemblysigntool> sign /f <fullpathmycompany.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 verwendet das PVK-Dateiformat zum Speichern des privaten Schlüssels, können Sie den PVK Digital Certificate Files Importer (pvkimprt.exe) verwenden, um den Schlüssel in Ihren kryptografischen Dienstanbieter (CSP) zu importieren. Mit diesem Hilfsprogramm können Sie in das Branchenstandardformat von 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.

Siehe auch das Erstellen signierter Dateien und Kataloge.