Encryption done locally on a Server using command line can be used only if the Application is hosted on the same machine. If the Application is hosted in a load-balanced environment, the encryption should be done in a way so that the private key can be imported on all the load-balanced machines.
The commands need to be run with Admin permissions on the machine.
Run the following commands in Command Prompt in the similar order with Admin permissions:
Traverse to the path as per .Net Framework-
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
Encrypting Config file without using RSA Provider
aspnet_regiis.exe -pef <section name> <path to the config file>
-pef is the action to be performed for encryption.
e.g. aspnet_regiis.exe -pef “connectionStrings” “C:\Data\TestWebApp”
All the connection strings present in the above example will be encrypted.
Encrypting Config file using RSA Provider
Creating Key containers:
Aspnet_regiis.exe -pc “<name of Key container>” -exp
Asymmetric private keys should always be stored in a key container.
Add configProtectedData section in web.config to be encrypted:
<configProtectedData>
<providers>
<add name="MyRSAProvider"
type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=4.0.30319.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,processorArchitecture=MSIL"
keyContainerName="MyRSAKey"
useMachineContainer="true" />
</providers>
</configProtectedData>
The above section can only be added after < configSections > else it’ll be removed automatically.
The PublicKeyToken above can be found for the System.Configuration dll using the sn utility:
sn -T "C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Configuration.dll"
The key container name and the Provider name used above can be used in the example commands below.
Granting Access to an RSA Key Container to the AppPool:
aspnet_regiis -pa “<name of Key container>” “NT AUTHORITY\NETWORK SERVICE” -full
Encrypt command using Provider:
aspnet_regiis.exe -pef <name of config section> <path to the Config file> -prov “<name of Provider>”
Exporting the Key Container in Order to be used on Other Machines:
aspnet_regiis -px “< name of Key container >” <Path for Keys XML file> -pri
Import Key Container on another machine:
aspnet_regiis -pi “< name of Key container>” <Path for Keys XML file>
Path for keys e.g. C:\rsakeys.xml. The xml file can be copied to the same path on the other machine.
Delete the Xml File from Your Server
ASP.Net will automatically decrypt the Connection String using the grant permission given above to the AppPool and hence you need to access the Connection String in the same way as you would do normally.
To decrypt the config section locally using aspnet_regiis.exe use the below command:
Decrypt command: aspnet_regiis.exe -pdf < name of config section> <Path to the Config file>
e.g. aspnet_regiis.exe -pdf “connectionStrings” “C:\Data\TestWebApp”