【发布时间】:2016-06-21 16:59:39
【问题描述】:
我有一个用于开发的应用程序池……我让它在我的凭据下运行(因此我不必担心权限/访问问题)。有两件事让我觉得我的凭据可能只是放在一个文件(或注册表项)中……这令人担忧:
- 当我更改密码时,我必须更新存储的凭据
- 设置对话框有一个确认密码字段
如果 IIS 只是存储一些身份验证令牌或其他内容,我希望只输入一次密码(因为身份验证会立即进行)。
有人知道我的凭据存储在哪里吗?它们是否只是使用一些系统密钥加密,然后在应用程序池启动时取出并使用?
这是我输入身份凭据的对话框:
我从应用程序池的高级设置中打开该对话框:
其他信息
Windows 7 上的 IIS 7.5
我正在在其他应用程序池中使用虚拟帐户,但这不是我在这里使用的:我使用的是实际的 Windows 帐户凭据
更新
根据 nicolas-dietrich 的回复,我发现了以下内容……
IIS 7.5 的应用程序池凭据(和常规设置)存储在%systemroot%\System32\Inetsrv\config\applicationHost.config。
加密由 AesProtectedConfigurationProvider 处理,这是 protect sensitive config info 的标准 (?) 方式(如数据库连接字符串或 - 你知道 - 密码)
以下是相关部分,其中敏感/不相关信息已替换为省略号 (...):
<configProtectedData>
<providers>
<!-- … -->
<add name="IISWASOnlyAesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="…" />
</providers>
</configProtectedData>
<system.applicationHost>
<applicationPools>
<add name="DefaultAppPool" queueLength="5000" managedRuntimeVersion="v4.0" />
<add name="GeneralDev" queueLength="5000" autoStart="true">
<processModel identityType="SpecificUser" userName="mydomain\myusername" password="[enc:IISWASOnlyAesProvider:…:enc]" />
</add>
<!-- … -->
<applicationPoolDefaults managedRuntimeVersion="v4.0">
<processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="false" />
</applicationPoolDefaults>
</applicationPools>
<!-- … -->
</system.applicationHost>
希望,足够安全吗? ¯\_(ツ)_/¯
【问题讨论】:
-
我也想知道这个和任务调度器!
-
当您说 IIS 6.1 时,我相信您的意思是 IIS7.5。没有 6.1,但 Windows 7 是 Windows 6.1,并且有 IIS7.5 - Help->About 看起来有点混乱。
-
@JoeEnos 是的,它是 v7.5 :headslap:
-
@n8wrl 不确定任务计划程序...看起来密码可能通过注册表存储 (HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\CredWom)。无论如何都不在任务配置文件中(只有用户名)
-
因为它使用了AesProtectedConfigurationProvider,所以它将密钥存储在一个KeyContainer中。谁有权访问 KeyContainer?它是 LocalMachine 范围的吗?