我有一堆.Net配置文件,其中包含Windows服务帐户和/或SQL服务器登录的密码。我想从配置文件中取出它们并使它们更安全。
在配置文件中使用密码有什么好办法?
由于
答案 0 :(得分:3)
您实际上可以加密配置文件的各个部分。它与您在问题中询问的配置文件没有“分开”,但它比在配置文件中存储未加密/明文密码更安全。
加密连接字符串的示例(来自命令提示符):
aspnet_regiis -pe "connectionStrings" -app "/SampleApplication" -prov "RsaProtectedConfigurationProvider"
请注意,除了连接字符串之外,这种技术也可以应用于此类。
请参阅教程:https://msdn.microsoft.com/en-us/library/zhhddkxy%28v=vs.140%29.aspx
要解密和加密Web.config文件的某个部分,ASP.NET进程必须具有读取相应加密密钥信息的权限。有关更多信息,请参阅导入和导出受保护的配置RSA密钥容器。
应用程序将能够本机使用加密值,但如果用户有权通过文件共享访问配置文件,则字符串仍将被加密。
另一个可能有一些额外信息的教程: http://www.codeproject.com/Tips/795135/Encrypt-ConnectionString-in-Web-Config
请注意,使用适当的密钥可以对加密进行加密。最安全的做法是锁定远程并共享对存储配置文件的区域的访问权限。如果没有其中任何一个,除了服务器的管理员之外,任何人都不应该访问您的配置文件。
答案 1 :(得分:1)
不确定您是指代桌面应用程序,还是指的是Web应用程序。如果是前者,那么我会说你肯定应该加密配置文件中的密码。
如果您指的是Web应用程序,那么您还可以选择加密凭据并使用aspnet_setreg将它们保存在注册表中。然后在配置文件中引用您的注册表位置。
这也可以在不更改配置文件的情况下轻松在不同环境中使用不同的凭据。例如,在沙箱环境中,您使用以下注册表项加密沙箱凭据:HKLM \ SOFTWARE \ MY_SECURE_APP \,但在生产服务器上,您有一个加密到同一密钥的生产ID。
答案 2 :(得分:1)
我必须不同意这里给出的答案。假设您的程序需要在没有输入密码的情况下启动,则该程序需要以任何方式访问一些明文凭证。如果对配置文件进行加密,那么将解密该配置文件的密钥放在哪里?加密配置文件并不能改善任何事情,只会使管理工作变得更加困难,并且安全性也没有明显改善。
最后,您必须依靠拥有该证书的计算机的安全性。尽可能使它变硬,并尽可能限制对其的访问。
有一个longer article,详细说明了这一事实。
答案 3 :(得分:0)
我将看一下Data Protection API:MSDN Windows Data Protection
答案 4 :(得分:0)
没有人听说过使用服务帐户+受信任的连接!