Je ne parviens pas à chiffrer une chaîne de connexion dans app.config. J'ai un code qui protégera la section connectionStrings de app.config, mais le mot de passe est toujours affiché en clair.
Je dois chiffrer la chaîne de connexion afin qu'elle ne soit pas en texte brut lors du déploiement. Je vois des questions similaires sur SO pour web.config, mais pas app.config.
Regardez Cet article il contient des exemples très utiles. Vous recherchez fondamentalement System.Configuration.SectionInformation.ProtectSection
pour vous aider ici.
Jetez également un coup d’œil à Implémentation de la configuration protégée
Vous pouvez facilement appliquer la même solution que web.config, il vous suffit de renommer votre app.config en web.config, de le chiffrer à l'aide de l'outil aspnet_regiis puis de le renommer en app.config.
%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" c:\<folder containing your web.config>
(arrêtez au niveau du dossier et ne mettez pas le "\" final)Vous pouvez l'ouvrir dans le bloc-notes pour voir le fichier crypté. Dans Visual Studio, vous verrez que c'est déchiffré. Vous pouvez utiliser votre chaîne de connexion de la même manière que si elle n’était pas chiffrée.
Définir l'emplacement de config
File
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
si vous voulez chiffrer connectionStrings
config.ConnectionStrings.SectionInformation.ProtectSection(Nothing);
vous devez être au courant des parties de la configuration de l'application
donc si vous voulez chiffrer AppSettings
config.AppSettings.SectionInformation.ProtectSection(Nothing);
• renommer le fichier App.config en web.config
• Lancer l'invite de commande en tant qu'administrateur:
Pour chiffrer:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" l'emplacement de votre projet entre guillemets et -prov "DataProtectionConfigurationProvider" Ex: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" "D:\location\location1\location" -prov "DataProtectionConfigurationProvider"
Pour déchiffrer:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings" l'emplacement de votre projet entre guillemets Ex: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings" "D:\location1\location"
Pour une erreur: ajouter ceci dans la configuration xmlns="http://schemas.Microsoft.com/.NetConfiguration/v2.0"
Comme ça:
• Enfin, renommez web.config
en App.Config
Un moyen d'automatiser cela:
ProjectSettings> Compile> BuildEvents> Modifier la post-génération
Collez le code ci-dessous:
SET ApplicationName=YourAppWithoutExtention
echo.
echo POST BUILD ACTIONS
echo ====================
if EXIST web.config (
echo Deleting web.config
DEL web.config
)
echo Renaming %ApplicationName%.exe.config to web.config
REN %ApplicationName%.exe.config web.config
echo Running aspnet_regis against webconfig
SET rpath=%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" "$(TargetDir)
SET rpath=%rpath:~0,-1%"
echo Path: %rpath%
%rpath%
echo Renaming web.config to %ApplicationName%.exe.config
REN web.config %ApplicationName%.exe.config
echo Done.
Remplacer "YourAppWithoutExtention" par le nom de votre application.
Ensuite, chaque fois qu'il se construit, il crypte automatiquement votre app.config.