proteger net encriptar app asp.net encryption web-config aspnet-regiis.exe system.configuration

asp.net - app - Usando ASPNet_Regiis para encriptar la sección de configuración personalizada, ¿puedes hacerlo?



encriptar web config (5)

Este es un truco total, pero no estoy seguro de que haya otra manera de hacerlo sin nombrar fuertemente el ensamblado que define tu sección personalizada y GACIFICARLO (aunque dijiste que eso tampoco funcionó, y no estoy seguro por qué no lo haría). Dado que aspnet_regi se ejecuta en la carpeta <unidad>: / Windows / Microsoft.Net / Framework / <versión> (en WinXP), puede copiar la DLL que define su sección de configuración en la carpeta Framework / <versión> relevante, y luego Deberia trabajar.

Tengo una aplicación web con una sección de configuración personalizada. Esa sección contiene información que me gustaría encriptar (esperaba utilizar ASPNet_RegIIS en lugar de hacerlo yo mismo).

Web.Config:

<?xml version="1.0"?> <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <configSections> <section name="MyCustomSection" type="MyNamespace.MyCustomSectionHandler, MyAssembly"/> </configSections> <configProtectedData> <providers> <clear /> <add name="DataProtectionConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" keyContainerName="MyKeyContainer" useMachineContainer="true" /> </providers> </configProtectedData> <MyCustomSection> <blah name="blah1"> <blahChild name="blah1Child1" /> </blah> </MyCustomSection>

El manejador de configuración funciona muy bien antes de intentar encriptarlo. Cuando intento encriptarlo con:

aspnet_regiis -pef "MyCustomSection" c: / inetpub / wwwroot / MyWebsite -prov DataProtectionConfigurationProvider

Me sale un error:

Sección de configuración de cifrado ... Se produjo un error al crear el manejador de sección de configuración para MyCustomSection: no se pudo cargar el archivo o ensamblado ''MyAssembly'' o una de sus dependencias. El sistema no puede encontrar el archivo especificado. (c: / inetpub / wwwroot / MyWebsite / web.config línea 5)

Lo intenté con / sin el proveedor configurado. Con / sin grupos de sección. Con / sin haber comenzado el sitio web de antemano. Intenté poner temporalmente mi ensamblaje en el GAC para el registro. También probé mi sección de log4net solo para probar algo que no era mío, sin suerte. He ejecutado el símbolo del sistema como administrador. ¿Algunas ideas? ¿O puede ASPNet_RegIIS simplemente no ser utilizado para secciones personalizadas?

Un último intento después de ver MSDN fue cambiar mi manejador para heredar de ConfigurationSection en lugar de implementar IConfigurationSectionHandler ya que técnicamente estaba en desuso en 2.0 (esperando que fuera algo relacionado con la versión de aspnet_regiis). No hubo suerte allí tampoco.

Cualquier idea házmelo saber. ¡Gracias!


Estoy usando una solución por la cual temporalmente hago comentarios sobre el contenido del elemento configSections:

<configSection> <!-- <section name="CustomSection" type="" /> --> </configSection>

Luego puede ejecutar el cifrado usando aspnet_regiis -pef como de costumbre. Después de ejecutar esto, simplemente elimine el comentario de la sección y su sitio estará listo para ejecutarse.


La respuesta que se muestra como correcta es correcta. Quería agregar un comentario pero no pude porque es un comentario demasiado largo (entradas de configuración de muestra).

El nombre de la sección debe usar el nombre completo de los ensamblajes. Una calificación de ensamblaje en tiempo de ejecución no funciona con aspnet_regiis.exe.

Esto funciona:

<configSections> <section name="securityConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Security.Configuration.SecuritySettings, Microsoft.Practices.EnterpriseLibrary.Security, Version=5.0.414.0, Culture=neutral, PublicKeyToken=9c844884b2afcb9e" /> </configSections>

Pero esto NO FUNCIONA:

<configSections> <section name="securityConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Security.Configuration.SecuritySettings, Microsoft.Practices.EnterpriseLibrary.Security" /> </configSections> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <qualifyAssembly partialName="Microsoft.Practices.EnterpriseLibrary.Security" fullName="Microsoft.Practices.EnterpriseLibrary.Security, Version=5.0.414.0, Culture=neutral, PublicKeyToken=9c844884b2afcb9e" /> </assemblyBinding> </runtime>


Para el registro, terminé con una pequeña página de mantenimiento para hacer esto por mí.

var currentConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/"); // Unprotect ConfigurationSection section = currentConfig.GetSection("MyCustomSection"); if (section.SectionInformation.IsProtected) { section.SectionInformation.UnprotectSection(); currentConfig.Save(); } // Protect if (!section.SectionInformation.IsProtected) { section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider"); currentConfig.Save(); }

Advertencias: Su proceso necesitará acceso de escritura a los archivos de configuración que se modifican. Querrá una forma de autorizar quién puede ejecutar esto. Por lo generally reiniciarás el sitio web cuando guardes.


aspnet_regiis debe poder enlazar el ensamblado. Se aplican las reglas normales de enlace .net.

Lo aspnet_regiis_bin creando un directorio llamado aspnet_regiis_bin en el mismo directorio que aspnet_regiis.exe y un archivo aspnet_regiis_bin con aspnet_regiis_bin como una ruta de acceso privada como esta:

<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="aspnet_regiis_bin"/> </assemblyBinding> </runtime> </configuration>

Luego copio los ensamblados que definen las secciones de configuración personalizadas en aspnet_regiis_bin para que aspnet_regiis pueda encontrarlas.

Este procedimiento no requiere que los ensamblajes tengan un nombre fuerte ni estén en el GAC, pero sí es necesario desordenarlo en los directorios del marco.