代码改变世界

配置文件加密

2018-02-08 11:05  Evan  阅读(70)  评论(0)    收藏  举报

概述:

web.config中包含了一些应用程序的敏感信息,包括用户名、密码、连接字符串、加密秘钥等。将敏感信息以不可读的格式存储,可以使攻击者很难获得对敏感信息的访问权限(即使攻击者获得了对文件、数据库或其他存储位置的访问权限),从而可以增强应用程序的安全性。为了保护配置文件中的信息,ASP.NET提供了一项称为“受保护配置”的功能,用于加密配置文件中的敏感信息。
加密前:

<configuration>
  <connectionStrings>
    <add name="SampleSqlServer" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
   </connectionStrings>
</configuration>

加密后:

<connectionStrings 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>RXO/zmmy3sR0iOJoF4ooxkFxwelVYpT0riwP2mYpR3FU+r6BPfvsqb384pohivkyNY7Dm4lPgR2bE9F7k6TblLVJFvnQu7p7d/yjnhzgHwWKMqb0M0t0Y8DOwogkDDXFxs1UxIhtknc+2a7UGtGh6Di3N572qxdfmGfQc7ZbwNE=
            </CipherValue>
          </CipherData>
        </EncryptedKey>
      </KeyInfo>
      <CipherData>
        <CipherValue>KMNKBuV9nOid8pUvdNLY5I8R7BaEGncjkwYgshW8ClKjrXSM7zeIRmAy/cTaniu8Rfk92KVkEK83+UlQd+GQ6pycO3eM8DTM5kCyLcEiJa5XUAQv4KITBNBN6fBXsWrGuEyUDWZYm6Eijl8DqRDb11i+StkBLlHPyyhbnCAsXdz5CaqVuG0obEy2xmnGQ6G3Mzr74j4ifxnyvRq7levA2sBR4lhE5M80Cd5yKEJktcPWZYM99TmyO3KYjtmRW/Ws/XO3z9z1b1KohE5Ok/YX1YV0+Uk4/yuZo0Bjk+rErG505YMfRVtxSJ4ee418ZMfp4vOaqzKrSkHPie3zIR7SuVUeYPFZbcV65BKCUlT4EtPLgi8CHu8bMBQkdWxOnQEIBeY+TerAee/SiBCrA8M/n9bpLlRJkUb+URiGLoaj+XHym//fmCclAcveKlba6vKrcbqhEjsnY2F522yaTHcc1+wXUWqif7rSIPhc0+MT1hB1SZjd8dmPgtZUyzcL51DoChy+hZ4vLzE=
        </CipherValue>
      </CipherData>
    </EncryptedData>
  </connectionStrings>

.NET Framework 中的受保护配置提供程序:

1.DpapiProtectedConfigurationProvider:使用 Windows 数据保护 API (DPAPI) 对数据进行加密和解密。

2.RsaProtectedConfigurationProvider:使用 RSA 加密算法对数据进行加密和解密。

以上两种提供程序可以在%windows%\Microsoft.NET\Framework64\versionNumber\Config\machine.config的configProtectedData节点中找到。

这两种提供程序都可以对数据进行强加密。但是,将同一个经过加密的 Web.config 文件部署到数台服务器上的网络场,则只有通过!RsaProtectedConfigurationProvider才能导出加密密钥,并将其导入其他服务器。详细介绍及机密过程详见:​https://msdn.microsoft.com/zh-cn/library/yxw286t2(v=vs.100).aspx

加密方法:

ASP.NET IIS 注册工具 (Aspnet_regiis.exe):

使用 ASP.NET IIS 注册工具 (Aspnet_regiis.exe) 加密或解密 Web 配置文件的各节。在处理 Web.config 文件时,ASP.NET 将自动解密已加密的配置元素。

Aspnet_regiis.exe 工具位于 %windows%\Microsoft.NET\Framework64\versionNumber 文件夹中。

加密:

aspnet_regiis -pe "connectionStrings" -app "/SampleApplication" -site "CRSDashboard" -prov "DataProtectionConfigurationProvider"
aspnet_regiis -pe "connectionStrings" -app "/SampleApplication" -site "CRSDashboard" -prov "RsaProtectedConfigurationProvider"

使用-app选项可标识将加密其 Web.config 文件的应用程序,使用-site选项可标识该应用程序所属的网站。

在请求应用程序中的页或其他 ASP.NET 资源时,ASP.NET 会对受保护配置节调用提供程序,以解密信息供 ASP.NET 和应用程序代码使用。

解密:

aspnet_regiis -pd "connectionStrings" -app "/SampleApplication" -site "CRSDashboard"

不能加密的节点:

不能使用受保护配置来加密配置文件的 configProtectedData 节。也不能使用受保护配置来加密不使用节处理程序的配置节或者属于托管密码配置的节。

下面是不能使用受保护配置进行加密的配置节的列表:

processModel、runtime、mscorlib、startup、system.runtime.remoting、configProtectedData、satelliteassemblies、cryptographySettings、cryptoNameMapping 和 cryptoClasses。

建议您使用其他方法(如 ASP.NET 设置注册表控制台应用程序 Aspnet_setreg.exe 工具)来加密敏感信息,以保护这些配置节中的敏感信息。

展望:

MVC6开始,开发者不再需要web.config来配置应用,转而直接使用Json,xml和环境变量。

学习资料:

​https://msdn.microsoft.com/zh-cn/library/53tyfkaw(v=vs.100).aspx