vb.net - net - App.config cadena de conexión Error de protección
obtener cadena de conexion app.config c# (4)
Así que lo hice funcionar.
- eliminó la cuenta de usuarios antiguos de la computadora portátil
- restablecer app.config para tener una sección no protegida
- archivo clave eliminado de todas las teclas de la máquina de los usuarios
- ejecutó la aplicación y le permitió proteger la sección
Pero todo esto lo hizo funcionar para este usuario.
AHORA necesito saber qué tengo que hacer para cambiar el código y proteger la sección para que varios usuarios en una PC puedan usar la aplicación. Aquí vengo Virtual PC (¡bien después de las vacaciones a WDW mañana y hasta el próximo miércoles)!
cualquier consejo para ayudarme a orientarme en la dirección correcta, ya que no tengo mucha experiencia en este tipo de encriptación RSA.
Me encuentro con un problema que tuve antes; no puedo encontrar mi referencia sobre cómo resolverlo.
Aquí está el problema. Encriptamos la sección de cadenas de conexión en la aplicación.config para nuestra aplicación cliente usando el siguiente código:
config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
If config.ConnectionStrings.SectionInformation.IsProtected = False Then
config.ConnectionStrings.SectionInformation.ProtectSection(Nothing)
'' We must save the changes to the configuration file.''
config.Save(ConfigurationSaveMode.Modified, True)
End If
El problema es que tuvimos un vendedor de permiso. La computadora portátil anterior va a un nuevo vendedor y bajo el inicio de sesión del nuevo usuario, cuando intenta hacer esto obtenemos un error. El error es:
Unhandled Exception: System.Configuration.ConfigurationErrorsException:
An error occurred executing the configuration section handler for connectionStrings. ---> System.Configuration.ConfigurationErrorsException: Failed to encrypt the section ''connectionStrings'' using provider ''RsaProtectedConfigurationProvider''.
Error message from the provider: Object already exists.
---> System.Security.Cryptography.CryptographicException: Object already exists
Encontré una solución más elegante que en mi respuesta original para mí. Encontré que si acababa de iniciar sesión como el usuario que originalmente instaló la aplicación y provocó que las cadenas de conexiones del archivo de configuración se encriptaran y vaya al directorio .net framework en un indicador de comandos de commadn y ejecute
aspnet_regiis -pa "NetFrameworkConfigurationKey" "{domain}/{user}"
otorgó permiso al otro usuario para acceder al contenedor de la clave de cifrado RSA y luego funciona para el otro usuario (s).
Solo quería agregarlo aquí porque pensé que había escrito este tema en nuestro blog de desarrollo pero lo encontré aquí, así que en caso de que necesite buscarlo nuevamente, estará aquí. Agregará un enlace a nuestro punto de blog dev en este hilo también.
Suena como un problema de permisos. El (nuevo) usuario en cuestión tiene permisos de escritura para el archivo app.config? ¿El usuario anterior era un administrador local o un usuario avanzado que podría haber enmascarado este problema?
http://blogs.msdn.com/mosharaf/archive/2005/11/17/protectedConfiguration.aspx#1657603
copiar y pegar: D
Lunes, 12 de febrero de 2007 12:15 a.m. por Naica
re: Cifrado de archivos de configuración con configuración protegida
Aquí hay una lista de todos los pasos que he hecho para encriptar dos secciones en mi PC y luego implementarlas en WebServer. Quizás ayudará a alguien ...
Para crear un contenedor de clave RSA a nivel de máquina
aspnet_regiis -pc "DataProtectionConfigurationProviderKeys" -exp
Agregue esto a web.config antes de la sección connectionStrings:
<add name="DataProtectionConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" keyContainerName="DataProtectionConfigurationProviderKeys" useMachineContainer="true" />
¡No te pierdas el
<clear />
desde arriba! Importante cuando juegas con encripting / decripting muchas vecesMarca para tener esto en la parte superior del archivo Web.Config. Si falta agregarlo:
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
Guarde y cierre el archivo Web.Config en VS (¡muy importante!)
En la ventana del símbolo del sistema (mi PC local) vaya a:
C: / WINNT / Microsoft.NET / Framework / v2.0.50727
Cifre: (¡Tenga en cuenta Cambiar la ruta de acceso físico de su Aplicación, o use la opción -app y proporcione el nombre del directorio virtual para la aplicación!). Debido a que utilicé VS en mi PC, preferí la opción siguiente. La ruta es la ruta a Web.config archivo)
aspnet_regiis -pef "connectionStrings" "c: / Bla / Bla / Bla" -prov "DataProtectionConfigurationProvider"
aspnet_regiis -pef "system.web / membership" "c: / Bla / Bla / Bla" -prov "DataProtectionConfigurationProvider"
Para descifrar (¡si es necesario!):
aspnet_regiis -pdf "connectionStrings" "c:/Bla/Bla/Bla" aspnet_regiis -pdf "system.web/membership" "c:/Bla/Bla/Bla"
Eliminar contenedor de claves (¡si es necesario!)
aspnet_regiis -pz "DataProtectionConfigurationProviderKeys"
Guarde la clave anterior en el archivo xml para exportarlo de su PC local al servidor web (UAT o producción)
aspnet_regiis -px "DataProtectionConfigurationProviderKeys" /temp/mykeyfile.xml -pri
Importe el contenedor de claves en los servidores de WebServer:
aspnet_regiis -pi "DataProtectionConfigurationProviderKeys" /temp/mykeyfile.xml
Otorgar acceso a la clave en el servidor web
aspnet_regiis -pa "DataProtectionConfigurationProviderKeys" "DOMAIN/User"
Vea en IIS al usuario de ASP.NET o use:
Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name
Eliminar Conceder acceso a la clave en el servidor web (¡Solo si es necesario!)
aspnet_regiis -pr "DataProtectionConfigurationProviderKeys" "Domain/User"
Copie y pegue en WebServer el archivo Web.config encriptado.