如何:使 X.509 证书可供 WCF 访问

如何:使 X.509 证书可供 WCF 访问

我已按照此处的说明进行操作

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。为此,请按照以下简单步骤操作。

  1. 启用对象访问审核

    1. 转到控制面板->管理工具->本地安全策略(gpedit
    2. 展开Computer Configuration\ Windows Settings\ Security Settings\Local Policies并选择Audit Policy
    3. 双击Audit Object Access政策
    4. 确保Define these policy settingsSuccess框已被选中。
    5. 应用此更改,成功的对象访问尝试审计现已启用。

  2. 为私钥添加审计条目

    1. C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\
    2. 右键单击相关私钥,选择属性
    3. 安全选项卡,选择先进的
    4. 选择审计选项卡并添加一个条目每个人团体教派。
    5. 检查更改权限盒子

一旦权限似乎“重置”:

  1. 检查安全日志
    1. 转到控制面板 -> 管理工具 -> 事件查看器 ( eventvwr)
    2. 选择安全日志
    3. 过滤日志依据事件 ID567
    4. 搜索 ”写入 DAC

写入 DAC权限是更改 DACL 的权限。只要对某个对象行使此权限,就会记录事件 ID 567,前提是该对象已审核。这样,您就可以确定哪个进程更改了您设置的权限。

相关内容