2010-11-23 65 views
5

Durante la instalación de nuestro programa que ejecuta este método para encrpyt secciones del app.config:
cifrado/descifrado de las secciones utilizando app.config RsaProtectedConfigurationProvider

// Get the application configuration file. 
Configuration config = 
     ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

// Define the Rsa provider name. 
const string provider = "RsaProtectedConfigurationProvider"; 

// Get the section to protect. 
ConfigurationSection connStrings = config.ConnectionStrings; 

if (connStrings != null) 
{ 
    if (!connStrings.SectionInformation.IsProtected) 
    { 
     if (!connStrings.ElementInformation.IsLocked) 
     { 
      // Protect the section. 
      connStrings.SectionInformation.ProtectSection(provider); 

      connStrings.SectionInformation.ForceSave = true; 
      config.Save(ConfigurationSaveMode.Full); 
     } 
    } 
} 

funciona bien hasta ahora. Pero si ejecuto este programa, nos encontramos con varias máquinas con el siguiente error "No se pudo descifrar usando el proveedor 'RsaProtectedConfigurationProvider'. Mensaje de error del proveedor: El contenedor de claves RSA no se pudo abrir".

Por supuesto que busqué y encontré this help, pero esto no funciona. ¿Algunas ideas?

+1

¿Cuál es el sistema operativo en máquinas defectuosas? Tal vez podría ser un problema de elevación UAC +. Cualquier información sobre esas máquinas sería buena. –

+0

Tal vez una buena dirección para seguir. Actualmente se conocen Vista, W7 y Server 2008. – Jan

Respuesta

2

Sí.

Motivo es que las máquinas que funcionan tienen RsaProtectedConfigurationProvider configuración en su machine.config. Aquellos que no funcionan, no lo tienen: simplemente agréguelo manualmente para esas máquinas.

Imagino que es uno de los pasos aspnet_regiis.exe hace. No puedo imaginar que quieras ejecutar eso en todas las máquinas cliente.

ACTUALIZACIÓN

OK, he hecho la parte principal del error en negrita en su pregunta - usted tiene razón, es una cuestión diferente. Es un problema de seguridad . Si mira la ubicación C: \ Documents and Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys o C: \ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys dependiendo del sistema operativo, vea una cantidad de archivos Su proceso tiene acceso a la carpeta, así que simplemente dé acceso a los archivos a toda la carpeta para la identidad de la aplicación o un archivo en particular (la marca de tiempo le indicará si la ha creado).

+0

Nope. Lo comprobé en una máquina que se estaba cayendo: machine.config contenía RsaProtectedConfigurationProvider. – Jan

+0

Imposible, no con el mismo nombre exacto. Verifique el nombre y asegúrese de que sea el mismo nombre. – Aliostad

+0

Lo comprobé dos veces: definitivamente las mismas secciones e incluso el contenido es el mismo. – Jan

3

Me encontré con problemas similares al depurar en Visual Studio 2010 en Win 7 con UAC configurado en su protección predeterminada.

Para poder solucionar este problema, tuve que ejecutar Visual Studio como administrador ("Ejecutar como administrador").

Tuve el mismo problema al intentar ejecutar aspnet_regiis.exe para encriptar la sección de mi web.config. Si no ejecutara la línea de comando/consola "como administrador" obtendría un error de línea de comando que era aún más críptico: "El objeto ya existe".

0

Lo obtuve en un app.config que se estaba ejecutando en un servidor de Windows configurado como un servidor SQL. No tenía IIS instalado. El archivo machine.config enumeró RSAProtectedConfigurationProvider como predeterminado, pero cuando miramos en las dos carpetas mencionadas anteriormente por Aliostad, las carpetas estaban vacías. No se instalaron claves. Usamos la herramienta aspnet_regiis para crear una clave personalizada. luego lo usamos para otorgar acceso a la identidad bajo la cual se ejecuta el trabajo por lotes. Todo esto ejecutaba cmd.exe y aspnet_regiis como administrador.

Cuestiones relacionadas