我已按照此处的说明进行操作
http://msdn.microsoft.com/en-us/library/aa702621.aspx
我运行 Windows 2003 IIS6,为应用程序池设置了单独的用户帐户,我使用 cacls.exe 授予此用户访问私钥的权限。这很有效。
但是,只要 asp.net 网站或 IIS 发生任何变化,权限就会丢失。例如,如果我更改 web.config 文件。重新启动 IIS,等待 5 小时,然后对 SSL 证书的调用就会失败,我无法再从尝试使用 WFC 服务的客户端访问它。我以 APP POOL 帐户身份登录,再次运行 cacls.exe,它就修复了问题。
我该如何永久修复这个问题,因为目前它大约每 5 小时停止一次。
更新
我实际上已经倒退了。现在我根本无法让它工作。这些是我遵循的步骤
C:\FindPrivateKey>FindPrivateKey.exe Trustedpeople currentuser
Private key directory:
C:\Documents and Settings\MYUSER\Application Data\Microsoft\Crypto\RSA\S--5-21-2205538328-2105125954-533649117-1053
Private key file name:
ab715bc6d3b1ae3bdb1a9e8e21a3b851_817f45df-79ce-4f15-9345-15b5c81281a1
给予许可
Cacls.exe "C:\Documents and Settings\MYUSER\Application Data\Microsoft\Crypto\RSA\S-1-5-21-2205538328-2105125954-533649117-1053\ab715bc6d3b1ae3bdb1a9e8e21a3b851_817f45df-79ce-4f15-9345-15b5c81281a1" /E /G "WWWTEST2\MYUSER":R
检查权限
Cacls.exe "C:\Documents and Settings\MYUSER\Application Data\Microsoft\Crypto\RSA\S-1-5-21-2205538328-2105125954-533649117-1053\ab715bc6d3b1ae3bdb1a9e8e21a3b851_817f45df-79ce-4f15-9345-15b5c81281a1"
Everyone:R
WWWTEST2\MYUSER:F
设置所有者
subinacl /file "C:\Documents and Settings\MYUSER\Application Data\Microsoft\Crypto\RSA\S-1-5-21-2205538328-2105125954-533649117-1053\ab715bc6d3b1ae3bdb1a9e8e21a3b851_817f45df-79ce-4f15-9345-15b5c81281a1" /setowner=WWWTEST2\MYUSER
尝试使用该服务时,我从 asp.net 网站收到错误
Exception: System.InvalidOperationException
Message: Cannot find the X.509 certificate using the following search criteria: StoreName 'TrustedPeople', StoreLocation 'CurrentUser', FindType 'FindByThumbprint', FindValue 'b33e04f057a52cb73007aec81eee86d2f75e3c69'.
Source: System.ServiceModel
at System.ServiceModel.Security.SecurityUtils
当我以 MYUSER 身份登录运行 IIS 应用程序池的帐户并转到“mmc”证书管理单元时,我可以在 TrustedPeople 下的“我的用户”帐户中看到该证书
更新
我可以通过在本地计算机/个人计算机上安装证书并使用 winhttpcertcfg 而不是 cacls 来使其工作
答案1
要修复此问题,您首先需要知道要修复什么。
要确定导致私钥 DACL 更改的原因,请启用对象访问审核,并为私钥的权限更改添加审核条目,应用Everyone
。为此,请按照以下简单步骤操作。
启用对象访问审核
- 转到控制面板->管理工具->本地安全策略(
gpedit
)- 展开
Computer Configuration
\Windows Settings
\Security Settings
\Local Policies
并选择Audit Policy
- 双击
Audit Object Access
政策- 确保
Define these policy settings
和Success
框已被选中。- 应用此更改,成功的对象访问尝试审计现已启用。
为私钥添加审计条目
- 去
C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\
- 右键单击相关私钥,选择属性
- 在安全选项卡,选择先进的
- 选择审计选项卡并添加一个条目每个人团体教派。
- 检查更改权限盒子
一旦权限似乎“重置”:
- 检查安全日志
- 转到控制面板 -> 管理工具 -> 事件查看器 (
eventvwr
)- 选择安全日志
- 过滤日志依据事件 ID:567
- 搜索 ”写入 DAC“
这写入 DAC权限是更改 DACL 的权限。只要对某个对象行使此权限,就会记录事件 ID 567,前提是该对象已审核。这样,您就可以确定哪个进程更改了您设置的权限。