asp.net encryption web-config

asp.net - Cómo encriptar una entrada en web.config



encryption web-config (3)

ASP.NET 4

He utilizado el cifrado de claves RSA para las cadenas de conexión en web.config en mi granja de servidores web. Sin embargo, hay una entrada de contraseña personalizada que me gustaría encriptar. ¿Cómo debo encriptarlo con la clave RSA sin tener cifradas las configuraciones restantes? por favor asesóreme, gracias.

Ejemplo:

<appSettings> ... <add key="Host" value="www.foo.com" /> <add key="Token" value="qwerqwre" /> <add key="AccountId" value="123" /> <add key="DepartmentId" value="456" /> <add key="Password" value="asdfasdf" /> <add key="SessionEmail" value="[email protected]" /> <add key="DefaultFolder" value="789" /> </appSettings>


En c # y .Net 4.5 tuve que usar esto para leer la configuración encriptada:

string password = ((System.Collections.Specialized.NameValueCollection)ConfigurationManager.GetSection("secureAppSettings"))["Password"].ToString();

pero de lo contrario funciona un regalo.


No puede encriptar una sola entrada; la infraestructura solo permite el cifrado de secciones de configuración completas.

Una opción es colocar la entrada en su propia sección de configuración y encriptar eso.


Puede poner la contraseña en una sección separada y encriptar solo esta sección. Por ejemplo:

<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="secureAppSettings" type="System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections> <appSettings> <add key="Host" value="www.foo.com" /> <add key="Token" value="qwerqwre" /> <add key="AccountId" value="123" /> <add key="DepartmentId" value="456" /> <add key="SessionEmail" value="[email protected]" /> <add key="DefaultFolder" value="789" /> </appSettings> <secureAppSettings> <add key="Password" value="asdfasdf" /> </secureAppSettings> </configuration>

y luego (nótese que estoy usando DPAPI en mi ejemplo, así que adapte el proveedor para RSA):

aspnet_regiis -pef secureAppSettings . -prov DataProtectionConfigurationProvider

Una vez encriptado, el archivo se verá así:

<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="secureAppSettings" type="System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections> <appSettings> <add key="Host" value="www.foo.com" /> <add key="Token" value="qwerqwre" /> <add key="AccountId" value="123" /> <add key="DepartmentId" value="456" /> <add key="SessionEmail" value="[email protected]" /> <add key="DefaultFolder" value="789" /> </appSettings> <secureAppSettings configProtectionProvider="DataProtectionConfigurationProvider"> <EncryptedData> <CipherData> <CipherValue>AQAAANCMnd.......</CipherValue> </CipherData> </EncryptedData> </secureAppSettings> </configuration>

La forma en que accedería a esas configuraciones en su aplicación una vez que el archivo está encriptado sigue siendo la misma y completamente transparente:

var host = ConfigurationManager.AppSettings["Host"]; var password = ConfigurationManager.AppSettings["Password"];