使用cmd加密App.Config自定义元素

时间:2016-06-01 15:57:24

标签: asp.net encryption web-config app-config aspnet-regiis.exe

我可以使用 aspnet_regiis.exe 命令配置连接字符串加密。现在我创建了配置部分,在其中添加了自定义配置元素集合,这将存储连接信息的值。

namespace ExpressSnapSortCreation
{
    /// <summary>
    /// This Class hold the the Collection of Cofigration key 
    /// </summary>
    internal class ServerReplicationsCollection : ConfigurationElementCollection
    {
        /// <summary>
        /// This Will return the ConfigurationElement 
        /// </summary>
        /// <returns>ConfigurationElement</returns>
        protected override ConfigurationElement CreateNewElement()
        {
            return new ServerReplicationsElement();

        }
        /// <summary>
        /// Get Element BY key 
        /// </summary>
        /// <param name="element"></param>
        /// <returns></returns>
        protected override object GetElementKey(ConfigurationElement element)
        {
            return ((ServerReplicationsElement)element).Name;
        }
        /// <summary>
        /// This is override on the Elements 
        /// </summary>
        public class ServerReplicationsElement : ConfigurationElement
        {
            /// <summary>
            /// Name of the Element 
            /// </summary>
            [ConfigurationProperty("name", IsRequired = true)]

            public string Name
            {
                get { return (string)this["name"]; }
                set { this["name"] = value; }
            }

            /// <summary>
            /// Data base name
            /// </summary>
            [ConfigurationProperty("connectionString", IsRequired = true)]           
            public string ConnectionString
            {
                get { return (string)this["connectionString"]; }
                set { this["connectionString"] = value; }
            }

            /// <summary>
            /// Data base user name 
            /// </summary>
            [ConfigurationProperty("providerName", IsRequired = true)]

            public string ProviderName
            {
                get { return (string)this["providerName"]; }
                set { this["providerName"] = value; }
            }         

            /// <summary>
            /// Display Order 
            /// </summary>
            [ConfigurationProperty("order", IsRequired = false)]

            public int Order
            {
                get { return (int)this["order"]; }
                set { this["order"] = value; }
            }
        }
    }
}

这是章节创作的代码

  class ServerReplications : ConfigurationSection
    {
        /// <summary>
        /// The name of this section in the app.config.
        /// </summary>
        public const string SectionName = "ReplicationConfigurationSection";
        /// <summary>
        /// Replication data base name 
        /// </summary>
        private const string ReplicationCenterCollectionName = "ReplicationDataBases";

        [ConfigurationProperty(ReplicationCenterCollectionName)]
        [ConfigurationCollection(typeof(ServerReplicationsCollection), AddItemName = "add")]
        public ServerReplicationsCollection ReplicationDataBases { get { return (ServerReplicationsCollection)base[ReplicationCenterCollectionName]; } }        
    }

这是我的App Config文件。

 <?xml version="1.0"?>
    <configuration>
      <configSections>
            <section name="ReplicationConfigurationSection" 
          type="ExpressSnapSortCreation.ServerReplications, ExpressSnapSortCreation" />
      </configSections>
      <ReplicationConfigurationSection>
        <ReplicationDataBases>
          <add name="ApplicationServices"  connectionString="Data Source=PC-002\SQLEXPRESS2014;Initial Catalog=AML25;Persist Security Info=True;User ID=sa;Password=StItS!@#SeRvErPC-003" providerName="System.Data.SqlClient" order="1" />
          <add name="ApplicationServices2"  connectionString="Data Source=PC-004\SQLEXPRESS2014;Initial Catalog=AML26;Persist Security Info=True;User ID=sa;Password=StItS!@#SeRvErPC-002" providerName="System.Data.SqlClient" order="2" />
        </ReplicationDataBases>

      </ReplicationConfigurationSection>
      <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
      </startup>
    </configuration>

在应用程序中,我们获取连接字符串的值。出于安全目的我们无法在App.config值中显示数据。然后需要加密以下部分

  1. 这是我使用的第一个命令

    aspnet_regiis.exe -pef "ReplicationConfigurationSection" "C:\Users\mukesh.singh\Documents\Visual Studio 2015\Projects\AML\ExpressSnapSortCreation"

  2. 收到错误将文件名“app.config”转换为“Web.config”

      

    创建配置节处理程序时发生错误   for ReplicationConfigurationSection:无法加载文件或程序集   'ExpressSnapSortCreation'或其依赖项之一。系统   找不到指定的文件。   (C:\ Users \ mukesh.singh \ Documents \ Visual Studio   2015 \ Projects \ AML \ ExpressSnapSortCreation \ bin \ Debug \ web.config第4行)

         

    无法加载文件或程序集“ExpressSnapSortCreation”或其中之一   它的依赖关系。该系统找不到指定的文件。失败!

    1. 更改后
    2.   

      无法从中加载类型'ExpressSnapSortCreation.ServerReplications'   assembly'System.Web,Version = 4.0.0.0,Culture = neutral,   公钥= b03f5f7f11d50a3a”。

      1. 我也试过这个组合

        aspnet_regiis.exe -pef "ExpressSnapSortCreation.ServerReplications/ExpressSnapSortCreations" "C:\Users\mukesh.singh\Documents\Visual Studio 2015\Projects\AML\ExpressSnapSortCreation

1 个答案:

答案 0 :(得分:1)

这是我用来加密app.config上的自定义部分的代码。我只是在Bin文件夹中打开它是加密的app.config文件

  Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            ConfigurationSection section = config.GetSection("ReplicationConfigurationSection");
            if (section != null)
            {
                if (!section.IsReadOnly())
                {
                    if (!section.SectionInformation.IsProtected)
                    {
                        if (!section.ElementInformation.IsLocked)
                        {
                            section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");
                            section.SectionInformation.ForceSave = true;
                            config.Save(ConfigurationSaveMode.Full);
                            Console.WriteLine("Section {0} is now protected by {1}",
                                section.SectionInformation.Name.ToString(),
                                section.SectionInformation.ProtectionProvider.Name.ToString());
                        }
                    }
                }
            }

当我打开Config文件时,它看起来像这样

    <configuration>
  <configSections>
        <section name="ReplicationConfigurationSection" type="ExpressSnapSortCreation.ServerReplications, ExpressSnapSortCreation" allowLocation="true" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" overrideModeDefault="Allow" restartOnExternalChanges="true" requirePermission="true" />
  </configSections>

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
  </startup>
  <ReplicationConfigurationSection configProtectionProvider="RsaProtectedConfigurationProvider">
    <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
      xmlns="http://www.w3.org/2001/04/xmlenc#">
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
          <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
            <KeyName>Rsa Key</KeyName>
          </KeyInfo>
          <CipherData>
            <CipherValue>FXUE9iChoq/7HGE4nV3muaPZy4ejcDCcZx0PVasHZJi4xRs0ZPXI08unUegvXs+C2FALEskpHa+Tt4u24I8OhSRS9QI+I2kpgxTlQvMFmsvFu6pkDQS1jt13EHmov0Thr1CBGhMXyHMm0EGr0+yWKI3PfD9vwGmQl0yawLdyiockQk9kCuik8g8jnpiyaidYL/RKpdwNPBuH9wOm8WWTXlUL4N+SO98jAX0PPoDjaDbDdB14t71Favg7vxpjIj5pDlljj59ek3pudW0etIHm6v8YsJaE9Et62DfzB31W4kmGNgmmGWTu4/hF93J0kv9VgkmKTcdOmeXq2KHA2JCLKg==</CipherValue>
          </CipherData>
        </EncryptedKey>
      </KeyInfo>
      <CipherData>
        <CipherValue>JkWK1jpOzcbtX8k/SVvTVRxQKO0ylRyWQ8imAOaIz51e3JmdhqXgdH8p5unceEiLCH2PTZOBZMIgYW4hYILiGnUE4SBZ6PfFr2vGowXdg13K808uSAx9taFb0HfvubcSQ23nwoBuJJmKfYooZX73YRnRvxIFH5SJZZ+WB8mTlNgaAZ+JftaN2rAlpH/cei4gwPCR64PaTu5VDJflSj0WnF7ZD13c0I0ZpHtJs29u0XTkBnAsL5DGULZsAexn2+89uaLfNpr9K+AYW8477TelVpnHGsMGDSOYOlWNUylldjATKZ/sgzDU/gq29dV+9RO18xvCHLXWjKKiT4B7UOlp82/1D/ky3OlK6opCEIJbCStm0q8MrvSQksdPN/yJ+S0Tv3E8hD4Wmf6grJOBlMGesomickqOzEudc+3fRwQS4Paf+ca3NgAk5utI+piZNhNtAnA/XU1ozDD0Zv381xaMTOTNjBq35hplK8zuHBVg+bZkbilSd3L4x4QAEv1Ds9Kt5hyUZyUNMWoXUXk0qoOP8UbMdHvUGvjsvAFudvZ7ZxtntiARptTFeTfg3qcghDdoyzOYBK3Md2urstEVdsdj6z6/RqBFO4qGY6hQ/IvIq+7lgG2rDsGH3AJlRNSdb+YJYktqGut65kvqcrSR2CgtYoGWcsUneBkpzQ65Rb0d6jL2Qt7zfJg1aA2iv97N15+tPjFDUQbbYFBi2ubvq1/pc7s/odaSUNK2LCfctXFG32MbEndJk1rXreLencAH/KlO2iJzA6QujwcT/LYo6w97lVbkrZAWWgxnUmVKeq+OwS6AybaK/sIw5wxBFsouCNdt</CipherValue>
      </CipherData>
    </EncryptedData>
  </ReplicationConfigurationSection>
</configuration>

更多。

  1. Encrypting sections and-or settings in an App.config file that will be redistributed

  2. https://msdn.microsoft.com/en-us/library/system.configuration.rsaprotectedconfigurationprovider(v=vs.80).aspx