如何授予账户访问证书的权限?

7

我持有MSMQ服务个人存储的证书,我需要授予网络服务访问该证书的权限。

我所知道的唯一方法是在win2008/7上使用certutil.exe进行操作,如下:

certutil -service -service -repairstore MSMQ\My "" D:PAI(A;;GA;;;BA)(A;;GA;;;SY)(A;;GR;;;NS)

感谢http://blogs.msdn.com/b/gautamm/archive/2010/10/26/https-messaging-with-client-side-certificate-fails-with-iis-error-403.aspx的帮助。

然而,在Win2003 / XP上,certutil不识别“-service”参数,所以没什么用。

我的问题是如何以适用于Win2003 / XP和Win2008 / 7的方式进行操作?

我需要一个非交互式方法(命令行实用程序、脚本、COM/.NET/Win32 API)。

2个回答

5
如果你只需要在证书的私钥上设置ACL权限(就像你链接的页面建议的那样),我最近发布了一个答案这里,介绍了如何做到这一点。
打开X509Store并获取当前的证书,然后在私钥上设置ACL。
你可以使用类似以下内容来获取需要访问权限的帐户的SID(或者如果你知道它总是网络服务,则只需使用众所周知的SID S-1-5-20):
NTAccount nt = new NTAccount("NT_AUTHORITY", "NetworkService");
SecurityIdentifier sid = (SecurityIdentifier)nt.Translate(typeof(SecurityIdentifier));

我的另一个答案中有设置ACL的代码。(注意:我在Windows Server 2003上运行过它,但没有在XP上运行过。)


你是否尝试过打开与Windows服务相关联的X509Store?请提供代码片段。谢谢。 - mark
我没有找到简单的方法来做到这一点。 这个链接:http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/3b8f0606-fe05-4607-bc7c-183fc7b719dd/中有几个想法。 其中一个是使用WSE 2.0类(查看链接以查看发布的代码片段)。 我没有尝试它,因为我不想安装WSE 2.0,但这里是我找到的WSE 2.0下载链接:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1ba1f631-c3e7-420a-bc1e-ef18bab66122 - Jim Flood
我已将其标记为答案,因为您所引用的帖子包含了答案 - 使用X509Store(IntPtr)构造函数,在其中使用P/Invoke打开服务证书存储的句柄。 - mark

1

我们遇到了一个类似的问题,定时发布应用程序到安全站点时失败。

客户端无法访问证书存储。下面提供的链接提到了从Windows 2008 R2 MMC中管理证书,并授予相关用户帐户访问权限。我们能够通过这种方式运行计划进程并授权运行客户端的帐户。

另一种解决方案是通过计划程序授予程序最高级别的访问权限(安全风险),并允许其像管理员一样运行。

以下是上面提到的链接 http://msmvps.com/blogs/luisabreu/archive/2010/09/13/grant-access-to-certificate-s-private-key-in-iis-7-5.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接