obtener from encrypt encriptar connectionstrings connectionstring conexion cadena app c# .net encryption connection-string

c# - from - encrypt connectionstring app config



Cifrar y desplegar app.config (2)

Leí y probé mucho para encontrar la mejor práctica para cifrar e implementar un app.config en diferentes máquinas. En general, me gustaría asegurar el contenido de la cadena de conexión de terceros y desplegar la aplicación en diferentes máquinas. No configuraré cada máquina manualmente.

Sé que hay varias maneras como:

  • Aspnet_Regiis (RSAProtectedConfigurationProvider, DPAPIProtectedConfigurationProvider) enlazado a una máquina, usuario o personalizado. Clave de cifrado RSA.

  • System.Security.Cryptography.ProtectedData enlazado a una máquina o usuario.

  • Cifre la app.config en la primera ejecución. Lo cual no es seguro.

¿Qué recomienda o cuál es la mejor práctica para cifrar una aplicación app.config y proporcionar la aplicación a diferentes máquinas mediante una configuración o con copiar y pegar?


Como ya mencioné en la pregunta, hay muchas formas diferentes de cifrar un archivo de configuración. Para una perspectiva más amplia, me gustaría describir una oportunidad adicional. No describiré la implementación concreta, más el concepto.

Con una acción personalizada en un instalador msi, puede cifrar el archivo de configuración directamente con la API de protección de datos de Windows (DPAPI). Para asegurar la segunda entropía puede usar un ofuscador. Como resultado, solo la aplicación puede cifrar el archivo de configuración.

Ventaja

  • Muy seguro.
  • No es necesaria la configuración de la máquina.
  • Inserte la credencial durante la configuración.

Desventaja

  • El archivo de configuración no está cifrado en la configuración. Tienes que protegerlo (permisos).

Por favor, siéntase libre de discutir y dar algún comentario a esta respuesta.


Paso 1 Crear un par de llaves RSA

aspnet_regiis -pc yourkey -exp

Paso 2 Exporta tu clave en el archivo XML

aspnet_regiis -px yourkey keyfile.xml -pri

para cada maquina

Paso 3 Importa tu contenedor

aspnet_regiis -pi yourkey keyfile.xml (see step 2)

para cada maquina

Paso 4 Editar machine.config (ruta canónica C: / Windows / Microsoft.NET / Framework [64 | 32] / v [Versión] / Config)

agregue en la sección configProtectedData este elemento a continuación y establezca defaultProvider = "YourProvider"

<add name="YourProvider" type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses RsaCryptoServiceProvider to encrypt and decrypt for my infrastucture" keyContainerName="yourkey" cspProviderName="" useMachineContainer="true" useOAEP="false" />

Luego puede cifrar en una máquina y pegar en otra, recuerde que debe otorgar privilegios a los usuarios con

aspnet_regiis -pa yourkey [DOMAIN/USER]

El grupo de administradores ya está autorizado.

Para más información http://msdn.microsoft.com/en-us/library/yxw286t2(v=vs.90).aspx

Por supuesto, estos pasos se pueden poner en un archivo powershell / batch

Otra forma de cifrar una sección ConnectionStrings por código es

var connectionStrings = ConfigurationManager.GetSection("connectionStrings") if(!section.SectionInformation.IsProtected) connectionStrings.SectionInformation.ProtectSection("YourProvider");

En un escenario conectado y cliente / servidor, le propongo que la solución que he adoptado en una red amplia es no distribuir la cadena de conexión en app.config, sino que requiere la información de la conexión en un servicio que puede ser un servicio web o un servicio RESTful Después de la autenticación del usuario.

En el paso más o menos es así.

  1. Autenticar usuario
  2. Requerir información de conexión en el servicio con nombre de usuario como parámetro (protocolo HTTPS)
  3. una cadena de conexión de retorno de servicio
  4. App it connect en DB

Con esta solución, puede elegir a qué servidor se conecta el usuario si tiene un servidor regional o más servidores

Espero ser de ayuda