Секция шифрования connectionStrings - утилита для app.config - PullRequest
25 голосов
/ 27 апреля 2011

Существует ли утилита, которая зашифровывает именованный раздел конфигурации (или только раздел connectionStrings) в файле app.config аналогично тому, как можно использовать aspnet_regiis с файлами web.config?

Я знаю, что это можно сделать в коде - есть примеры кода, но я надеюсь избежать написания приложения для этого.

Ответы [ 4 ]

18 голосов
/ 27 апреля 2011

Вы можете попробовать следующее:

https://magenic.com/thinking/encrypting-configuration-sections-in-net

Вкратце - переименуйте файл app.config в web.config - схема идентична, поэтому aspnet_regiis работает. После завершения переименуйте обратно в app.config.

6 голосов
/ 22 января 2013

Старый вопрос, но вот способ Microsoft:

.NET 2.0: http://msdn.microsoft.com/en-us/library/89211k9b(v=vs.80).aspx

.NET 3.5: http://msdn.microsoft.com/en-us/library/ms254494(v=vs.90).aspx (Раздел «Шифрование разделов файла конфигурации с использованиемЗащищенная конфигурация ")

Переключение шифрования в файле app.config:

static void ToggleConfigEncryption(string exeConfigName)
{
    // Takes the executable file name without the 
    // .config extension. 
    try
    {
        // Open the configuration file and retrieve  
        // the connectionStrings section.
        Configuration config = ConfigurationManager.
            OpenExeConfiguration(exeConfigName);

        ConnectionStringsSection section =
            config.GetSection("connectionStrings")
            as ConnectionStringsSection;

        if (section.SectionInformation.IsProtected)
        {
            // Remove encryption.
            section.SectionInformation.UnprotectSection();
        }
        else
        {
            // Encrypt the section.
            section.SectionInformation.ProtectSection(
                "DataProtectionConfigurationProvider");
        }
        // Save the current configuration.
        config.Save();

        Console.WriteLine("Protected={0}",
            section.SectionInformation.IsProtected);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}
5 голосов
/ 27 сентября 2013

Скомпилируйте это консольное приложение и перетащите на него файл конфигурации. Он выложит копию файла конфигурации с зашифрованными строками подключения.

Обратите внимание, что вы должны зашифровать как тот же пользователь, который будет использовать файл конфигурации.

using System;
using System.Configuration;
using System.IO;

namespace ConnectionStringEncryptor
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                throw new ArgumentException("Please supply a config file to encrypt");
            }
            string originalConfigFilePath = args[0];
            AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", originalConfigFilePath);
            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            ConnectionStringsSection connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
            connectionStringsSection.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
            config.SaveAs(originalConfigFilePath + ".encrypted");
        }
    }
}
2 голосов
/ 21 марта 2018

Реализация PowerShell на основе ответа MichelZ:

<#
.SYNOPSIS
Encrypts a section in .NET app configuration file.
#>
function Protect-DotNetConfigSection
{
    [CmdletBinding()]
    param
    (
        # Path to .exe file.
        [Parameter(Mandatory = $true)]
        [string] $ExePath,
        # List of section names.
        [Parameter(Mandatory = $true)]
        [string[]] $Sections
    )

    $config = [System.Configuration.ConfigurationManager]::OpenExeConfiguration($ExePath)

    foreach ($section in $Sections)
    {
        $config.GetSection($section).SectionInformation.ProtectSection('DataProtectionConfigurationProvider')
    }

    $config.Save()
}

Protect-DotNetConfigSection 'C:\MyApp\MyApp.exe' 'connectionStrings'
Protect-DotNetConfigSection 'C:\MyApp\MyApp.exe' @('connectionStrings', 'appSettings')
...