Condividi tramite


Sn.exe (strumento nome sicuro)

Lo strumento Nome sicuro (Sn.exe) consente di firmare gli assembly con nomi sicuri. Sn.exe offre opzioni per la gestione delle chiavi, la generazione della firma e la verifica della firma.

Avvertimento

Non fare affidamento su nomi sicuri per la sicurezza. Forniscono solo un'identità univoca.

Per altre informazioni sulla denominazione avanzata e sugli assembly con nome sicuro, vedere Strong-Named Assembly e Procedura: Firmare un assembly con un nome sicuro.

Lo strumento Nome sicuro viene installato automaticamente con Visual Studio. Per avviare lo strumento, usare il prompt dei comandi per gli sviluppatori di Visual Studio o Visual Studio Developer PowerShell.

Annotazioni

Nei computer a 64 bit eseguire la versione a 32 bit di Sn.exe usando il prompt dei comandi per gli sviluppatori per Visual Studio e la versione a 64 bit usando il prompt dei comandi di Visual Studio x64 Win64.

Al prompt dei comandi digitare quanto segue:

Sintassi

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

Parametri

Opzione Description
-a identityKeyPairFile signaturePublicKeyFile Genera AssemblySignatureKeyAttribute i dati per eseguire la migrazione della chiave di identità alla chiave di firma da un file.
-ac identityPublicKeyFile identityKeyPairContainer signaturePublicKeyFile Genera AssemblySignatureKeyAttribute i dati per eseguire la migrazione della chiave di identità alla chiave di firma da un contenitore di chiavi.
-c [csp] Imposta il provider di servizi di crittografia predefinito da usare per la firma con nome sicuro. Questa impostazione si applica all'intero computer. Se non si specifica un nome CSP, Sn.exe cancella l'impostazione corrente.
-d container Elimina il contenitore di chiavi specificato dal CSP con nome sicuro.
-D assembly1 assembly2 Verifica che due assembly differiscano solo per firma. Viene spesso usato come controllo dopo che un assembly è stato rifirmato con una coppia di chiavi diversa.
-e assembly outfile Estrae la chiave pubblica dall'assembly e la archivia in outfile.
-h Visualizza la sintassi dei comandi e le opzioni per lo strumento.
-i infile container Installa la coppia di chiavi da infile nel contenitore di chiavi specificato. Il contenitore di chiavi risiede nel provider di servizi di configurazione con nome sicuro.
-k [keysize] outfile Genera una nuova RSACryptoServiceProvider chiave delle dimensioni specificate e la scrive nel file specificato. Sia una chiave pubblica che privata vengono scritte nel file.

Se non si specifica una dimensione della chiave, per impostazione predefinita viene generata una chiave a 1.024 bit se è installato il provider di crittografia avanzato Microsoft; in caso contrario, viene generata una chiave a 512 bit.

Il parametro keysize supporta lunghezze di chiave da 384 bit a 16.384 bit in incrementi di 8 bit se è installato il provider di crittografia avanzato di Microsoft. Supporta lunghezze di chiave da 384 bit a 512 bit in incrementi di 8 bit se è installato il provider di crittografia di base Microsoft.
-m [y or n] Specifica se i contenitori chiave sono specifici del computer o specifici dell'utente. Se si specifica y, i contenitori delle chiavi sono specifici del computer. Se si specifica n, i contenitori delle chiavi sono specifici dell'utente.

Se non si specificano né y né n, questa opzione visualizza l'impostazione corrente.
-o infile [outfile] Estrae la chiave pubblica dall'oggetto infile e la archivia in un file .csv. Una virgola separa ogni byte della chiave pubblica. Questo formato è utile per i riferimenti hardcoded alle chiavi come matrici inizializzate nel codice sorgente. Se non si specifica un file outfile, questa opzione inserisce l'output negli Appunti. Nota: Questa opzione non verifica che l'input sia solo una chiave pubblica. infile Se contiene una coppia di chiavi con una chiave privata, viene estratta anche la chiave privata.
-p infile outfile [hashalg] Estrae la chiave pubblica dalla coppia di chiavi infile e la archivia in outfile, facoltativamente usando l'algoritmo RSA specificato da hashalg. Questa chiave pubblica può essere usata per ritardare la firma di un assembly usando le opzioni /delaysign+ e /keyfile di Assembly Linker (Al.exe). Quando un assembly viene firmato in ritardo, solo la chiave pubblica viene impostata in fase di compilazione e lo spazio viene riservato nel file per l'aggiunta della firma in un secondo momento, quando la chiave privata è nota.
-pc container outfile [hashalg] Estrae la chiave pubblica dalla coppia di chiavi nel contenitore e la archivia in outfile. Se si usa l'opzione hashalg , l'algoritmo RSA viene usato per estrarre la chiave pubblica.
-Pb [y or n] Specifica se vengono applicati i criteri di bypass con nome sicuro. Se si specifica y, i nomi sicuri per gli assembly con attendibilità totale non vengono convalidati quando vengono caricati in un trust AppDomaincompleto. Se si specifica n, i nomi sicuri vengono convalidati per la correttezza, ma non per un nome sicuro specifico. l'oggetto StrongNameIdentityPermission non ha alcun effetto sugli assembly con attendibilità totale. È necessario eseguire un controllo personalizzato per verificare la corrispondenza di un nome sicuro.

Se non viene specificato né yn , questa opzione visualizza l'impostazione corrente. Il valore predefinito è y. Nota: Nei computer a 64 bit è necessario impostare questo parametro sia nelle istanze a 32 bit che nelle istanze a 64 bit di Sn.exe.
-q[uiet] Specifica la modalità non interattiva; elimina la visualizzazione dei messaggi di operazione riuscita.
-R[a] assembly infile Firma nuovamente un assembly firmato o con segno ritardato in precedenza con la coppia di chiavi infile.

Se si usa -Ra , gli hash vengono ricalcolate per tutti i file nell'assembly.
-Rc[a] assembly container Firma nuovamente un assembly firmato in precedenza o con segno ritardato con la coppia di chiavi nel contenitore.

Se si usa -Rca , gli hash vengono ricalcolate per tutti i file nell'assembly.
-Rh assembly Ricomputa gli hash per tutti i file nell'assembly.
-t[p] infile Visualizza il token per la chiave pubblica archiviata infile. Il contenuto di infile deve essere una chiave pubblica generata in precedenza da un file di coppia di chiavi usando -p. Non usare l'opzione -t[p] per estrarre il token direttamente da un file di coppia di chiavi.

Sn.exe calcola il token usando una funzione hash dalla chiave pubblica. Per risparmiare spazio, Common Language Runtime archivia i token di chiave pubblica nel manifesto come parte di un riferimento a un altro assembly quando registra una dipendenza a un assembly con un nome sicuro. L'opzione -tp visualizza la chiave pubblica oltre al token. Se l'attributo AssemblySignatureKeyAttribute è stato applicato all'assembly, il token è relativo alla chiave identity e viene visualizzato il nome dell'algoritmo hash e la chiave di identità.

Si noti che questa opzione non verifica la firma dell'assembly e non deve essere usata per prendere decisioni di attendibilità. Questa opzione visualizza solo i dati del token di chiave pubblica non elaborati.
-T[p] assembly Visualizza il token di chiave pubblica per l'assembly.L'assembly deve essere il nome di un file che contiene un manifesto dell'assembly.

Sn.exe calcola il token usando una funzione hash dalla chiave pubblica. Per risparmiare spazio, il runtime archivia i token di chiave pubblica nel manifesto come parte di un riferimento a un altro assembly quando registra una dipendenza a un assembly con un nome sicuro. L'opzione -Tp visualizza la chiave pubblica oltre al token. Se l'attributo AssemblySignatureKeyAttribute è stato applicato all'assembly, il token è relativo alla chiave identity e viene visualizzato il nome dell'algoritmo hash e la chiave di identità.

Si noti che questa opzione non verifica la firma dell'assembly e non deve essere usata per prendere decisioni di attendibilità. Questa opzione visualizza solo i dati del token di chiave pubblica non elaborati.
-TS assembly infile Firma l'assembly firmato o parzialmente firmato con la coppia di chiavi infile.
-TSc assembly container Firma l'assembly firmato o parzialmente firmato con la coppia di chiavi nel contenitore di chiavi.
-v assembly Verifica il nome sicuro nell'assembly, dove assembly è il nome di un file che contiene un manifesto dell'assembly.
-vf assembly Verifica il nome sicuro nell'assembly. A differenza dell'opzione -v , -vf forza la verifica anche se è disabilitata usando l'opzione -Vr .
-Vk regfile.reg assembly [userlist] [infile] Crea un file di voci di registrazione (.reg) che è possibile usare per registrare l'assembly specificato per ignorare la verifica. Le regole per la denominazione degli assembly applicabili all'opzione -Vr si applicano anche a -Vk . Per informazioni sulle opzioni userlist e infile , vedere l'opzione -Vr .
-Vl Elenca le impostazioni correnti per la verifica con nome sicuro in questo computer.
-Vr assembly [userlist] [infile] Registra l'assembly per ignorare la verifica. Facoltativamente, è possibile specificare un elenco delimitato da virgole di nomi utente a cui applicare la verifica skip. Se si specifica infile, la verifica rimane abilitata, ma la chiave pubblica infile viene usata nelle operazioni di verifica. È possibile specificare l'assembly nel formato *, strongname per registrare tutti gli assembly con il nome sicuro specificato. Per strongname specificare la stringa di cifre esadecimali che rappresentano la forma tokenizzata della chiave pubblica. Vedere le opzioni -t e -T per visualizzare il token di chiave pubblica. Cautela: Usare questa opzione solo durante lo sviluppo. L'aggiunta di un assembly all'elenco di verifica ignora crea una vulnerabilità di sicurezza. Un assembly dannoso potrebbe usare il nome dell'assembly completo (nome dell'assembly, versione, impostazioni cultura e token di chiave pubblica) dell'assembly aggiunto all'elenco di verifica ignorando la sua identità. In questo modo l'assembly dannoso potrebbe anche ignorare la verifica.
-Vu assembly Annulla la registrazione dell'assembly per ignorare la verifica. Le stesse regole per la denominazione degli assembly che si applicano a -Vr si applicano a -Vu.
-Vx Rimuove tutte le voci di verifica ignorate.
-? Visualizza la sintassi dei comandi e le opzioni per lo strumento.

Annotazioni

Tutte le opzioni Sn.exe fanno distinzione tra maiuscole e minuscole e devono essere digitate esattamente come mostrato per essere riconosciute dallo strumento.

Osservazioni:

Le opzioni -R e -Rc sono utili con gli assembly con firma ritardata. In questo scenario, solo la chiave pubblica è stata impostata in fase di compilazione e la firma viene eseguita in un secondo momento, quando la chiave privata è nota.

Annotazioni

Per i parametri (ad esempio, -Vr) che scrivono in risorse protette, ad esempio il Registro di sistema, eseguire SN.exe come amministratore.

Lo strumento Nome sicuro presuppone che le coppie di chiavi pubbliche/private vengano generate con l'identificatore dell'algoritmo AT_SIGNATURE . Coppie di chiavi pubbliche/private generate con l'algoritmo AT_KEYEXCHANGE generano un errore.

Esempi

Il comando seguente crea una nuova coppia di chiavi casuale e la archivia in keyPair.snk.

sn -k keyPair.snk

Il comando seguente archivia la chiave nel keyPair.snk contenitore nel CSP MyContainer con nome sicuro.

sn -i keyPair.snk MyContainer

Il comando seguente estrae la chiave pubblica da keyPair.snk e la archivia in publicKey.snk.

sn -p keyPair.snk publicKey.snk

Il comando seguente visualizza la chiave pubblica e il token per la chiave pubblica contenuta in publicKey.snk.

sn -tp publicKey.snk

Il comando seguente verifica l'assembly MyAsm.dll.

sn -v MyAsm.dll

Il comando seguente elimina MyContainer dal provider di servizi di configurazione predefinito.

sn -d MyContainer

Vedere anche