Importazione ed esportazione di contenitori di chiavi RSA della configurazione protetta

Aggiornamento: novembre 2007

La configurazione protetta consente di creare, eliminare, esportare e importare contenitori di chiavi RSA quando si utilizza l'oggetto RsaProtectedConfigurationProvider. Uno degli scenari in cui queste funzionalità si rivelano particolarmente utili è rappresentato da una Web farm in cui lo stesso file Web.config crittografato viene distribuito a diversi server. In questo caso, è necessario distribuire ai server anche lo stesso contenitore di chiavi RSA. A tale scopo, si creerà un contenitore di chiavi RSA per l'applicazione, lo si esporterà in un file XML e lo si importerà in tutti i server in cui è necessario decrittografare il file Web.config crittografato.

La creazione di contenitori di chiavi RSA può essere utile anche su un singolo server Web che ospita più applicazioni ASP.NET. Creando un contenitore di chiavi RSA per ciascuna applicazione o per ciascun gruppo di applicazioni di un solo cliente, è possibile migliorare la sicurezza delle informazioni di configurazione riservate di un'applicazione assicurando che il file Web.config dell'applicazione in questione non possa essere decrittografato utilizzando il contenitore di chiavi RSA di un'altra applicazione.

Creazione di un contenitore di chiavi RSA

Per creare un contenitore di chiavi RSA, viene utilizzato lo strumento di registrazione ASP.NET IIS (Aspnet_regiis.exe) con l'opzione –pc. È necessario assegnare al contenitore di chiavi un nome che identifichi il contenitore utilizzato dall'oggetto RsaProtectedConfigurationProvider specificato nella sezione configProtectedData del file Web.config dell'applicazione. Per accertarsi che il contenitore di chiavi RSA appena creato possa essere esportato, è necessario includere l'opzione -exp.

Il comando che segue consente, ad esempio, di creare un contenitore di chiavi RSA denominato SampleKeys, definito a livello di computer ed esportabile.

aspnet_regiis -pc "SampleKeys"–exp

Nell'esempio riportato di seguito viene illustrata la sezione configProtectedData di un file Web.config. Tale sezione specifica un oggetto RsaProtectedConfigurationProvider che utilizza un contenitore di chiavi RSA a livello di computer denominato SampleKeys.

<configProtectedData>
   <providers>
      <add name="SampleProvider" 
           type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,
                 Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
                 processorArchitecture=MSIL"
           keyContainerName="SampleKeys" 
           useMachineContainer="true" />
   </providers>
</configProtectedData>
Nota:

Per evitare l'eliminazione involontaria delle chiavi di crittografia e decrittografia per le sezioni protette della configurazione, i contenitori di chiavi RSA non vengono eliminati quando .NET Framework viene disinstallato.

Concessione dell'autorità di accesso a un contenitore di chiavi RSA

Per impostazione predefinita, i contenitori di chiavi RSA vengono rigorosamente protetti da elenchi di controllo di accesso (ACL) NTFS presenti sul server in cui essi sono installati. In questo modo si migliora la sicurezza delle informazioni crittografate imponendo limitazioni sugli utenti che possono accedere alla chiave di crittografia.

Per consentire l'utilizzo del contenitore di chiavi RSA in ASP.NET, è necessario autorizzare l'identità del processo dell'applicazione ASP.NET in modo che disponga di accesso in lettura a tale contenitore. Per ulteriori informazioni sull'impostazione e la determinazione dell'identità dell'applicazione ASP.NET, vedere Rappresentazione ASP.NET.

È possibile utilizzare lo strumento Aspnet_regiis.exe con l'opzione -pa per concedere all'identità dell'applicazione ASP.NET l'autorizzazione per la lettura di un contenitore di chiavi RSA. Il comando che segue consente, ad esempio, di concedere all'account NETWORK SERVICE di Windows Server 2003 l'accesso in lettura al contenitore di chiavi RSA denominato SampleKeys a livello di computer:

aspnet_regiis -pa "SampleKeys" "NT AUTHORITY\NETWORK SERVICE"
Nota:

Se il contenitore di chiavi RSA è un contenitore a livello utente, è necessario eseguire l'accesso utilizzando l'account dell'utente con il profilo di Windows nel quale viene memorizzata la chiave, nonché includere l'opzione -pku per concedere l'accesso al contenitore di chiavi RSA a livello utente. Per ulteriori informazioni, vedere Informazioni sui contenitori di chiavi RSA a livello di computer e utente.

Per utilizzare l'oggetto RsaProtectedConfigurationProvider predefinito specificato nella configurazione del computer, è innanzitutto necessario concedere all'identità Windows dell'applicazione l'accesso al contenitore di chiavi del computer denominato NetFrameworkConfigurationKey, ovvero il contenitore di chiavi specificato per il provider predefinito. Il comando che segue consente, ad esempio, di concedere all'account NETWORK SERVICE l'accesso al contenitore di chiavi RSA utilizzato dall'oggetto RsaProtectedConfigurationProvider predefinito:

aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"

Il contenitore di chiavi RSA NetFrameworkConfigurationKey è il contenitore di chiavi predefinito per i comandi immessi mediante lo strumento Aspnet_regiis.exe. È pertanto possibile immettere il comando precedente anche nel modo seguente:

aspnet_regiis -pa "NT AUTHORITY\NETWORK SERVICE"

Esportazione di un contenitore di chiavi RSA

Per esportare un contenitore di chiavi RSA in un file XML, è possibile utilizzare lo strumento Aspnet_regiis.exe con l'opzione –px. Il file XML può essere utilizzato come backup per il contenitore di chiavi RSA o per importare il contenitore di chiavi RSA in un altro server. Per decrittografare le informazioni crittografate è necessaria la parte relativa alla chiave privata del contenitore di chiavi. Per poter utilizzare su un altro server il contenitore di chiavi esportato, sarà necessario importare anche la chiave privata. È possibile includere la chiave privata nel file XML specificando l'opzione –pri al momento dell'esportazione della chiave. È inoltre necessario specificare se il contenitore di chiavi esportato sia definito a livello utente o di computer. Per esportare un contenitore di chiavi a livello utente, è necessario connettersi al sistema con l'identità dell'utente nel cui profilo Windows è memorizzata la chiave. Per specificare una chiave a livello utente, includere l'opzione -pku quando si esportano le informazioni sulla chiave crittografate; altrimenti la chiave esportata verrà estratta dall'archivio delle chiavi del computer. Per ulteriori informazioni sulle chiavi di crittografia a livello utente o di computer, vedere Informazioni sui contenitori di chiavi RSA a livello di computer e utente.

Il seguente comando consente, ad esempio, di esportare il contenitore di chiavi RSA a livello di computer denominato SampleKeys nel file keys.xml e di includere le informazioni sulla chiave privata.

aspnet_regiis -px "SampleKeys" keys.xml -pri
Nota:

Per garantire la sicurezza, dopo aver esportato un contenitore di chiavi RSA in un file XML, copiare il file XML in un percorso esterno al server ed eliminarlo dal server. In questo modo si riduce il rischio che un utente non autorizzato ottenga l'accesso al contenitore di chiavi RSA e riesca quindi a decrittografare i file Web.config crittografati utilizzando il contenitore di chiavi in questione.

Importazione di un contenitore di chiavi RSA

È possibile utilizzare lo strumento Aspnet_regiis.exe con l'opzione –pi per importare un contenitore di chiavi RSA da un file XML. È inoltre necessario specificare se il contenitore di chiavi importato è definito a livello utente o di computer. Per importare un contenitore di chiavi a livello utente, è necessario connettersi al sistema con l'identità dell'utente nel cui profilo Windows verrà memorizzata la chiave. Per specificare una chiave a livello utente, includere l'opzione -pku quando si importano le informazioni sulla chiave di crittografia. In caso contrario, la chiave esportata verrà importata nell'archivio delle chiavi del computer.

Il seguente comando consente, ad esempio, di importare un contenitore di chiavi RSA a livello di computer denominato SampleKeys dal file keys.xml:

aspnet_regiis -pi "SampleKeys" keys.xml

È necessario concedere all'identità dell'applicazione ASP.NET che utilizzerà il contenitore di chiavi RSA importato l'autorità per leggere il contenuto del contenitore in questione. Per ulteriori informazioni, vedere Concessione dell'autorità di accesso a un contenitore di chiavi RSA in precedenza in questo argomento.

Eliminazione di un contenitore di chiavi RSA

Per eliminare un contenitore di chiavi RSA, è possibile utilizzare lo strumento Aspnet_regiis.exe con l'opzione –pz. Prima di eliminare un contenitore di chiavi RSA, assicurarsi di aver esportato la chiave in un file XML, in modo da poterla importare in un secondo momento, o verificare che non siano presenti informazioni crittografate con il contenitore di chiavi RSA che debbano essere decrittografate.

Quando si elimina un contenitore di chiavi RSA, è necessario specificarne il nome e identificarlo come definito a livello utente o di computer. Per eliminare un contenitore di chiavi a livello utente, è necessario connettersi al sistema con l'identità dell'utente nel cui profilo Windows è memorizzata la chiave.

Il comando che segue consente, ad esempio, di eliminare il contenitore di chiavi RSA a livello di computer denominato SampleKeys.

aspnet_regiis -pz "SampleKeys"

Vedere anche

Attività

Procedura dettagliata: creazione ed esportazione di un contenitore di chiavi RSA

Altre risorse

Crittografia delle informazioni di configurazione utilizzando la configurazione protetta