65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Web.Config 中加密 ConnectionString

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.87/5 (46投票s)

2014 年 7 月 11 日

CPOL

3分钟阅读

viewsIcon

339417

downloadIcon

4776

加密 Web.Config 中的配置

引言

本技巧提供有关如何在 Web.Config 中加密连接字符串以提高安全性并保持与数据库的安全连接的信息。 还有许多其他敏感信息可以加密,但在本技巧中,我将特别讨论加密 Web.Config 文件中的 ConnectionString

为什么这很重要?

加密 Web.Config 的敏感部分非常重要,因为它们确实是敏感的。想想生产环境的 Web.Config 文件。它可能包含运行 Web 应用程序所需的所有信息。 通常有用于 SQL 数据库连接、SMTP 服务器、API 密钥或其他关键信息的密码。 除此之外,Web.Config 文件通常被视为另一个源代码文件,这意味着团队中的任何开发人员,或者更准确地说,任何有权访问源代码的人,都可以看到 Web.Config 文件中存储的信息。

加密连接字符串

在我们的示例中,我们将加密 Web.Config 文件中的 ConnectionString

加密 Web.Config 之前

如果您查看下面的 Config 文件,它很容易阅读。 如果任何人可以访问您的 Web.Config 文件,这似乎并不安全。

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

加密 Web.Config

  1. 以管理员权限打开命令提示符
  2. 在命令提示符下,输入
     cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
  3. 如果您的 Web Config 位于“D:\Articles\EncryptWebConfig”目录路径中,请输入以下内容来加密 ConnectionString
    ASPNET_REGIIS -pef "connectionStrings" "D:\Articles\EncryptWebConfig"

    使用 Aspnet_regiis.exe 工具和 –pef 选项,并如上所示指定应用程序路径。

    注意:参数“connectionStrings”区分大小写。

加密 Web.Config 之后

加密 ConnectionStrings 部分后,您的 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>ZbDTF00MYzUUW5U3w3PU0rfiAH1UKhvuLSNWPmB/YifBKne6HAWfVc3CnKVimyP8SFyamaR5oAIAxj/xavfpox8EOYXNI+afsksiuA5huSDupCZKNuXq+VCZrdIyn6YOq+W7s3Ojlu7q9VwKcoKurl28l2hcPvWkBk11KYB7hr0=</CipherValue>
          </CipherData>
        </EncryptedKey>
      </KeyInfo>
      <CipherData>
        <CipherValue>42IPPRUjJxCNDHEBLCAJI4/NyLpLueZSBzUXO69lVdZU8+nLpxO+opnbZNxqddyzNnbCO1Uk2Da3ljExkqnLIxT2zs90JAhZvJ5ljIgCipq7ZEp7zHOpvTH9fBGoZJJWhgdddOrHZsLDE9mILjlvBHDhPQrYcMHtY6oLIbxJq92it82iBJv0fS7v1S/o0p4hAtfky+6hXCZWSKUJHr88NDrKe2EEK3mazD2QD5Ozf/w=</CipherValue>
      </CipherData>
    </EncryptedData>
  </connectionStrings>
</configuration>

访问解密的配置设置

很高兴知道 ASP.NET 在处理 Web.Config 文件时会自动解密该文件的内容。 因此,无需其他步骤即可解密加密的配置设置。 您可以通过加密 Web.Config 文件来运行您现有的应用程序,它将完美运行,而无需对现有代码进行任何修改。 这是不是很有趣?

 string ConnString = ConfigurationManager.ConnectionStrings[1].ToString();

解密连接字符串

是否可以解密我的 Web.Config,以便我可以读取其原始格式?

是的,这是可能的。

只需执行以下命令即可解密 Web.config 文件中的 connectionStrings 元素。

ASPNET_REGIIS -pdf "connectionStrings" "D:\Articles\EncryptWebConfig"

注意:参数“connectionStrings”区分大小写。

问答

1. 您可能会问我一个问题,如果可以使用 ASPNET_REGIIS 加密和解密 Web.Config 文件,那么任何有权访问 Web.Config 文件的人都可以解密内容,对吗?

要回答这个问题,我会说不,如果您加密您的 Config 文件,那么您的机器会将您的密钥存储起来,如果您将 Config 文件复制到不同的系统并尝试解密它,那么您可能会收到错误。

优点

  1. (加密后)Web.Config 敏感信息不是可读状态
  2. 您不必显式编写代码来解密 Web.Config 文件,因为 ASP.NET 会自动解密配置并处理您的请求

缺点

  1. 您无法在运行时修改加密的内容。 它要求您在编辑之前解密内容。

关注点

Web.Config 加密只需几分钟,并且比纯文本文件提供更高的安全性。 对于能够完全访问您的整个服务器的黑客来说,这可能还不够。

在了解加密的概念后,我正在加密存储在 Web.Config 中的所有敏感数据。 你呢?

历史

  • 2014/11/07:创建
  • 2014/15/07:更新了下载源代码的损坏链接。
© . All rights reserved.