在 Web.Config 中加密 ConnectionString






4.87/5 (46投票s)
加密 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
- 以管理员权限打开命令提示符
- 在命令提示符下,输入
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
- 如果您的 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 文件复制到不同的系统并尝试解密它,那么您可能会收到错误。
优点
- (加密后)Web.Config 敏感信息不是可读状态
- 您不必显式编写代码来解密 Web.Config 文件,因为 ASP.NET 会自动解密配置并处理您的请求
缺点
- 您无法在运行时修改加密的内容。 它要求您在编辑之前解密内容。
关注点
Web.Config 加密只需几分钟,并且比纯文本文件提供更高的安全性。 对于能够完全访问您的整个服务器的黑客来说,这可能还不够。
在了解加密的概念后,我正在加密存储在 Web.Config 中的所有敏感数据。 你呢?
历史
- 2014/11/07:创建
- 2014/15/07:更新了下载源代码的损坏链接。