Freigeben über


Sn.exe (Tool mit starkem Namen)

Das Tool "Starker Name" (Sn.exe) hilft beim Signieren von Assemblys mit starken Namen. Sn.exe bietet Optionen für die Schlüsselverwaltung, Signaturgenerierung und Signaturüberprüfung.

Warnung

Verlassen Sie sich nicht auf starke Namen für sicherheit. Sie stellen nur eine eindeutige Identität bereit.

Weitere Informationen zu stark benannten Assemblys und assemblys mit starkem Namen finden Sie unterStrong-Named Assemblys und Vorgehensweise: Signieren einer Assembly mit einem starken Namen.

Das Tool "Starker Name" wird automatisch mit Visual Studio installiert. Verwenden Sie zum Starten des Tools die Visual Studio Developer-Eingabeaufforderung oder Visual Studio Developer PowerShell.

Hinweis

Führen Sie auf 64-Bit-Computern die 32-Bit-Version von Sn.exe mithilfe der Entwickler-Eingabeaufforderung für Visual Studio und der 64-Bit-Version mithilfe der Visual Studio x64 Win64-Eingabeaufforderung aus.

Geben Sie an der Eingabeaufforderung Folgendes ein:

Syntax

sn [-quiet][option [parameter(s)]]

Die Parameter

Option Description
-a identityKeyPairFile signaturePublicKeyFile Generiert AssemblySignatureKeyAttribute Daten zum Migrieren des Identitätsschlüssels zum Signaturschlüssel aus einer Datei.
-ac identityPublicKeyFile identityKeyPairContainer signaturePublicKeyFile Generiert AssemblySignatureKeyAttribute Daten zum Migrieren des Identitätsschlüssels zum Signaturschlüssel aus einem Schlüsselcontainer.
-c [csp] Legt den standardmäßigen kryptografischen Dienstanbieter (CSP) fest, der für die sichere Namenssignierung verwendet werden soll. Diese Einstellung gilt für den gesamten Computer. Wenn Sie keinen CSP-Namen angeben, löscht Sn.exe die aktuelle Einstellung.
-d container Löscht den angegebenen Schlüsselcontainer aus dem starken Namen CSP.
-D assembly1 assembly2 Überprüft, ob sich zwei Assemblys nur nach Signatur unterscheiden. Dies wird häufig als Überprüfung verwendet, nachdem eine Assembly mit einem anderen Schlüsselpaar neu signiert wurde.
-e assembly outfile Extrahiert den öffentlichen Schlüssel aus der Assembly und speichert ihn in outfile.
-h Zeigt Befehlssyntax und -optionen für das Tool an.
-i infile container Installiert das Schlüsselpaar aus der Datei im angegebenen Schlüsselcontainer. Der Schlüsselcontainer befindet sich im CSP mit starkem Namen.
-k [keysize] outfile Generiert einen neuen RSACryptoServiceProvider Schlüssel der angegebenen Größe und schreibt ihn in die angegebene Datei. Sowohl ein öffentlicher als auch ein privater Schlüssel werden in die Datei geschrieben.

Wenn Sie keine Schlüsselgröße angeben, wird standardmäßig ein 1.024-Bit-Schlüssel generiert, wenn der von Microsoft erweiterte Kryptografieanbieter installiert ist; andernfalls wird ein 512-Bit-Schlüssel generiert.

Der Keysize-Parameter unterstützt Schlüssellängen von 384 Bit bis 16.384 Bit in Schritten von 8 Bits, wenn der von Microsoft erweiterte Kryptografieanbieter installiert ist. Es unterstützt Schlüssellängen von 384 Bit bis 512 Bit in Schritten von 8 Bits, wenn Der Microsoft-Basis-Kryptografieanbieter installiert ist.
-m [y or n] Gibt an, ob Schlüsselcontainer computerspezifisch oder benutzerspezifisch sind. Wenn Sie "y" angeben, sind Schlüsselcontainer computerspezifisch. Wenn Sie "n" angeben, sind Schlüsselcontainer benutzerspezifisch.

Wenn weder y noch n angegeben wird, zeigt diese Option die aktuelle Einstellung an.
-o infile [outfile] Extrahiert den öffentlichen Schlüssel aus der Datei und speichert ihn in einer .csv Datei. Ein Komma trennt jedes Byte des öffentlichen Schlüssels. Dieses Format ist nützlich für hartcodierte Verweise auf Schlüssel als initialisierte Arrays im Quellcode. Wenn Sie keine Ausgabe angeben, platziert diese Option die Ausgabe in der Zwischenablage. Anmerkung: Mit dieser Option wird nicht überprüft, ob es sich bei der Eingabe nur um einen öffentlichen Schlüssel handelt. Wenn das infile Schlüsselpaar ein Schlüsselpaar mit einem privaten Schlüssel enthält, wird auch der private Schlüssel extrahiert.
-p infile outfile [hashalg] Extrahiert den öffentlichen Schlüssel aus dem Schlüsselpaar in der Datei und speichert ihn in outfile, optional mithilfe des durch hashalg angegebenen RSA-Algorithmus. Dieser öffentliche Schlüssel kann verwendet werden, um eine Assembly mithilfe der Optionen /delaysign+ und /keyfile des Assembly Linker (Al.exe) zu verzögern. Wenn eine Assembly verzögert signiert ist, wird nur der öffentliche Schlüssel zur Kompilierungszeit festgelegt, und der Speicherplatz wird in der Datei reserviert, damit die Signatur später hinzugefügt werden kann, wenn der private Schlüssel bekannt ist.
-pc container outfile [hashalg] Extrahiert den öffentlichen Schlüssel aus dem Schlüsselpaar im Container und speichert ihn in outfile. Wenn Sie die Hashalg-Option verwenden, wird der RSA-Algorithmus verwendet, um den öffentlichen Schlüssel zu extrahieren.
-Pb [y or n] Gibt an, ob die Richtlinie für die Umgehung mit starkem Namen erzwungen wird. Wenn Sie "y" angeben, werden starke Namen für voll vertrauenswürdige Assemblys beim Laden in eine voll vertrauenswürdige AppDomainAssembly nicht überprüft. Wenn Sie "n" angeben, werden starke Namen auf Richtigkeit überprüft, aber nicht für einen bestimmten starken Namen. Dies StrongNameIdentityPermission hat keine Auswirkungen auf voll vertrauenswürdige Assemblys. Sie müssen ihre eigene Überprüfung auf eine übereinstimmung mit starkem Namen durchführen.

Wenn weder yn noch angegeben, zeigt diese Option die aktuelle Einstellung an. Der Standardwert lautet y. Anmerkung: Auf 64-Bit-Computern müssen Sie diesen Parameter sowohl in der 32-Bit- als auch in den 64-Bit-Instanzen von Sn.exefestlegen.
-q[uiet] Gibt den stillen Modus an; unterdrückt die Anzeige von Erfolgsmeldungen.
-R[a] assembly infile Signiert eine zuvor signierte oder verzögert signierte Assembly mit dem Schlüsselpaar in der Datei erneut.

Wenn -Ra verwendet wird, werden Hashes für alle Dateien in der Assembly neu komputiert.
-Rc[a] assembly container Signiert eine zuvor signierte oder verzögert signierte Assembly mit dem Schlüsselpaar im Container neu.

Wenn -Rca verwendet wird, werden Hashes für alle Dateien in der Assembly neu komputiert.
-Rh assembly Komppiliert Hashes für alle Dateien in der Assembly.
-t[p] infile Zeigt das Token für den öffentlichen Schlüssel an, der in der Datei gespeichert ist. Der Inhalt der Datei muss ein öffentlicher Schlüssel sein, der zuvor aus einer Schlüsselpaardatei mithilfe von -p generiert wurde. Verwenden Sie nicht die Option "-t[p] ", um das Token direkt aus einer Schlüsselpaardatei zu extrahieren.

Sn.exe berechnet das Token mithilfe einer Hashfunktion aus dem öffentlichen Schlüssel. Um Platz zu sparen, speichert die Common Language Runtime öffentliche Schlüsseltoken im Manifest als Teil eines Verweises auf eine andere Assembly, wenn eine Abhängigkeit von einer Assembly aufgezeichnet wird, die einen starken Namen hat. Die Option "-tp " zeigt zusätzlich zum Token den öffentlichen Schlüssel an. Wenn das AssemblySignatureKeyAttribute Attribut auf die Assembly angewendet wurde, gilt das Token für den Identitätsschlüssel, und der Name des Hashalgorithmus und des Identitätsschlüssels wird angezeigt.

Beachten Sie, dass diese Option die Assemblysignatur nicht überprüft und nicht verwendet werden sollte, um Vertrauensentscheidungen zu treffen. Mit dieser Option werden nur die unformatierten Daten des öffentlichen Schlüsseltokens angezeigt.
-T[p] assembly Zeigt das öffentliche Schlüsseltoken für die Assembly an. Die Assembly muss der Name einer Datei sein, die ein Assemblymanifest enthält.

Sn.exe berechnet das Token mithilfe einer Hashfunktion aus dem öffentlichen Schlüssel. Um Speicherplatz zu sparen, speichert die Laufzeit öffentliche Schlüsseltoken im Manifest als Teil eines Verweises auf eine andere Assembly, wenn eine Abhängigkeit von einer Assembly aufgezeichnet wird, die einen starken Namen hat. Die Option "-Tp " zeigt zusätzlich zum Token den öffentlichen Schlüssel an. Wenn das AssemblySignatureKeyAttribute Attribut auf die Assembly angewendet wurde, gilt das Token für den Identitätsschlüssel, und der Name des Hashalgorithmus und des Identitätsschlüssels wird angezeigt.

Beachten Sie, dass diese Option die Assemblysignatur nicht überprüft und nicht verwendet werden sollte, um Vertrauensentscheidungen zu treffen. Mit dieser Option werden nur die unformatierten Daten des öffentlichen Schlüsseltokens angezeigt.
-TS assembly infile Test signiert die signierte oder teilweise signierte Assembly mit dem Schlüsselpaar in der Datei.
-TSc assembly container Test signiert die signierte oder teilweise signierte Assembly mit dem Schlüsselpaar im Schlüsselcontainercontainer.
-v assembly Überprüft den starken Namen in der Assembly, wobei assembly der Name einer Datei ist, die ein Assemblymanifest enthält.
-vf assembly Überprüft den starken Namen in der Assembly. Im Gegensatz zur Option -v erzwingt -vf die Überprüfung, auch wenn sie mit der Option -Vr deaktiviert ist.
-Vk regfile.reg assembly [userlist] [infile] Erstellt eine Registrierungseinträgedatei (.reg), mit der Sie die angegebene Assembly für das Überprüfungssprungen registrieren können. Die Regeln für die Assemblybenennung, die für die Option "-Vr " gelten, gelten auch für -Vk . Informationen zu den Optionen "Userlist " und "Infile " finden Sie in der Option "-Vr ".
-Vl Listet die aktuellen Einstellungen für die Überprüfung mit starkem Namen auf diesem Computer auf.
-Vr assembly [userlist] [infile] Registriert assembly for verification skippping. Optional können Sie eine durch Trennzeichen getrennte Liste von Benutzernamen angeben, auf die die Überprüfung übersprungen werden soll. Wenn Sie infile angeben, bleibt die Überprüfung aktiviert, der öffentliche Schlüssel in der Datei wird jedoch in Überprüfungsvorgängen verwendet. Sie können assembly im Format *, strongname , angeben, um alle Assemblys mit dem angegebenen starken Namen zu registrieren. Geben Sie für strongname die Zeichenfolge von hexadezimalen Ziffern an, die die tokenisierte Form des öffentlichen Schlüssels darstellen. Weitere Informationen finden Sie in den Optionen "-t " und "-T ", um das Öffentliche Schlüsseltoken anzuzeigen. Vorsicht: Verwenden Sie diese Option nur während der Entwicklung. Das Hinzufügen einer Assembly zur Liste "Überprüfung überspringen" erstellt eine Sicherheitslücke. Eine schädliche Assembly könnte den vollständig angegebenen Assemblynamen (Assemblyname, Version, Kultur und öffentliche Schlüsseltoken) der Assembly verwenden, die der Überprüfungsliste zum Überspringen hinzugefügt wurde, um ihre Identität zu gefälschten. Dies würde es der böswilligen Assembly ermöglichen, auch die Überprüfung zu überspringen.
-Vu assembly Hebt die Registrierung der Assembly zum Überspringen der Überprüfung auf. Die gleichen Regeln für die Assemblybenennung, die für -Vr gelten, gelten für -Vu.
-Vx Entfernt alle Überprüfungssprungeinträge.
-? Zeigt Befehlssyntax und -optionen für das Tool an.

Hinweis

Bei allen Sn.exe Optionen wird die Groß-/Kleinschreibung beachtet und muss genau so eingegeben werden, wie vom Tool erkannt wird.

Bemerkungen

Die Optionen "-R " und "-Rc " sind nützlich bei Assemblys, die verzögert signiert wurden. In diesem Szenario wurde nur der öffentliche Schlüssel zur Kompilierungszeit festgelegt und die Signatur wird später ausgeführt, wenn der private Schlüssel bekannt ist.

Hinweis

Führen Sie für Parameter (z. B. "-Vr") , die in geschützte Ressourcen wie die Registrierung schreiben, SN.exe als Administrator aus.

Das Tool "Starker Name" geht davon aus, dass öffentliche/private Schlüsselpaare mit dem AT_SIGNATURE Algorithmusbezeichner generiert werden. Öffentliche/private Schlüsselpaare, die mit dem AT_KEYEXCHANGE Algorithmus generiert werden, generieren einen Fehler.

Examples

Der folgende Befehl erstellt ein neues Zufälliges Schlüsselpaar und speichert es in keyPair.snk.

sn -k keyPair.snk

Der folgende Befehl speichert den Schlüssel im keyPair.snk Container MyContainer im CSP mit starkem Namen.

sn -i keyPair.snk MyContainer

Der folgende Befehl extrahiert den öffentlichen Schlüssel aus keyPair.snk und speichert ihn in publicKey.snk.

sn -p keyPair.snk publicKey.snk

Der folgende Befehl zeigt den öffentlichen Schlüssel und das Token für den öffentlichen Schlüssel an, der in publicKey.snk.

sn -tp publicKey.snk

Mit dem folgenden Befehl wird die Assembly MyAsm.dllüberprüft.

sn -v MyAsm.dll

Der folgende Befehl löscht MyContainer den Standard-CSP.

sn -d MyContainer

Siehe auch