【发布时间】:2020-08-15 11:48:58
【问题描述】:
我有一个在 IIS 上运行的 ASP.Net Core 网站。我需要存储网站在生产中需要访问的一些密码。我没有可用的付费密码存储系统。我选择将我的密码存储在环境变量中。所以在我的生产机器上:
- 服务帐号
my_prod_service_account - 在
my_prod_service_account下运行的应用程序池MyProdAppPool - 在
MyProdAppPool中运行的网站MyDotNetCoreSite
方法一:普通环境变量
我以my_prod_service_account 身份登录生产机器,并在Powershell 中为该用户设置环境变量:
[Environment]::SetEnvironmentVariable("Pwd1", "MyPrecioussss1", "User");
[Environment]::SetEnvironmentVariable("Pwd2", "MyPrecioussss2", "User");
MyDotNetCoreSite 之后就可以读取这些环境变量了。
方法二:system.webServer\aspNetCore 环境变量
在生产机器上使用%WINDIR%\system32\inetsrv\config\applicationHost.config(IIS 配置文件)可以实现类似的效果。可以手动编辑,也可以through UI,但最后看起来是这样的:
<configuration>
<location path="MyDotNetCoreSite">
<system.webServer>
<aspNetCore>
<environmentVariables>
<environmentVariable name="Pwd1" value="MyPrecioussss1" />
<environmentVariable name="Pwd2" value="MyPrecioussss2" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</location>
</configuration>
iisresetMyDotNetCoreSite 之后可以将这些值作为环境变量读取。
问题
我想将我的密码存储方法从方法 1 更改为方法 2。前者为每个用户设置环境变量,后者为每个站点设置环境变量(我认为这更简洁)。但是我找不到足够的文档来判断方法 2 是否具有与方法 1 相同的安全级别。设置“正常”环境变量将其存储在注册表中 HKEY_Users\my_prod_service_account SID\Environment\Pwd1。访问注册表通常需要提升权限,如果有人闯入,我们将比知道 Pwd1 的黑客面临更大的问题。 applicationHost.config 和注册表一样安全吗?我可以放心地在其中存储密码吗?
【问题讨论】:
-
如果您还不知道,应用程序池身份的密码存储在 applicationHost.config 中,虽然是加密的 docs.microsoft.com/en-us/iis/manage/configuring-security/…
标签: asp.net-core iis environment-variables