我在MSMQ服务个人存储中有证书,我需要授予网络服务访问证书的权限。
我知道这样做的唯一方法是在win2008 / 7上使用certutil.exe,如下所示:
certutil -service -service -repairstore MSMQ\My "" D:PAI(A;;GA;;;BA)(A;;GA;;;SY)(A;;GR;;;NS)
然而,win2003 / XP上的certutil无法识别-service参数,所以没有用。
我的问题是如何以适合Win2003 / XP和Win2008 / 7的方式实现?
我需要一种非交互式方法(命令行实用程序,脚本,COM / .NET / Win32 API)。
答案 0 :(得分:4)
如果您只需要在证书的私钥(您的链接页面建议)上设置ACL权限,我最近刚发布了一个答案here,就我的发现方式而言。
打开X509Store并获取当前的证书,然后在私钥上设置ACL。
您可以使用类似的内容来获取需要访问权限的帐户的SID(或者如果您知道它始终是网络服务,则使用众所周知的SID S-1-5-20):
NTAccount nt = new NTAccount("NT_AUTHORITY", "NetworkService");
SecurityIdentifier sid = (SecurityIdentifier)nt.Translate(typeof(SecurityIdentifier));
我的其他answer具有设置ACL的代码。 (警告:我在Windows Server 2003上运行它,但不在XP上运行。)
答案 1 :(得分:1)
我们遇到了与安全网站发布的预定应用相似的问题。
客户端无法访问证书存储区。下面发布的链接提到管理来自Windows 2008 r2 mmc的证书,并授予对相关用户帐户的访问权限。我们能够以这种方式运行计划流程并授予对运行客户端的帐户的访问权限。
通过调度程序,另一个解决方案是授予程序最高级别的访问权限(安全风险)并允许它像管理员一样运行。