我正在开发一个ASP.NET MVC5网站,我很快就需要将其部署到IIS8网络服务器。我试图正确获取web.config文件的安全模型,特别是我想:
通过搜索SO和其他网站,我可以看到有针对每种方案的特定工具/技术:
我对这两者都很好,但我不能为我的生活看到如何结合这两种技术同时解决这两个问题。是否可以加密外部部分?这是否是正确的方法,因为许多答案现在已有几年的历史了,并且解决了旧版本的ASP.NET / MVC问题。
我不能成为第一个想要这样做的人,所以我确定我错过了一些明显的东西。
有人建议这可能已经回答here,但是问题是加密主web.config文件中的部分,我问的是加密外部部分。我指的是包括在内的部分'使用configSource XML属性。
答案 0 :(得分:2)
回答自己的问题可能是一种糟糕的形式,但我有一丝灵感,经过几个小时的实验,我按照自己的意愿工作。
我完全错误的是我试图加密外部文件。它不像那样工作。以下是它的工作原理,至少,它是如何在IIS8.5和ASP.NET v4.0.30319服务器上运行的。
在单独的文件中创建connectionStrings部分,例如Web.connectionStrings.config:
<?xml version="1.0"?>
<connectionStrings>
<add name="MyConnection" connectionString="{your connection string here}"
providerName="System.Data.SqlClient" />
</connectionStrings>
从web.config引用此文件:
<connectionStrings configSource="Web.connectionStrings.config" />
确保外部文件不受源代码控制,因此不会上传到您的SCCS。
部署 BOTH 文件,作为部署过程的一部分,或者如果您真的偏执,请手动部署安全文件。
通常使用Afzaal提到的文章中提到的aspnet_regiis.exe命令加密web.config的connectionStrings部分。此过程实际上会加密Web.connectionStrings.config文件的内容,并保持web.config文件不变。您需要保留外部文件,但现在已加密,这是非常安全的。
在单独的文件中创建安全关键设置,例如Web.appSettings.config。
<?xml version="1.0"?>
<appSettings>
<add key="wc1" value="web.app.config1" />
<add key="wc2" value="web.app.config2" />
</appSettings>
从web.config引用此文件:
<appSettings file="Web.App.config">
{other non-secure appSettings}
</appSettings>
再次确保安全文件不受源代码管理,并将这两个文件部署到生产服务器。
加密web.config文件的appSettings部分。
与connectionStrings部分不同,它根本不会改变外部文件。而是合并web.config和外部文件中的设置(如果遇到重复键,则外部文件优先),并以加密形式存储在web.config中。
此时,您可以删除Web.appSettings.config文件,因为其内容现已合并到主文件中。
注意事项: