Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何授予帐户访问证书的权限?_Windows_Security_Certificate - Fatal编程技术网

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

Windows 如何授予帐户访问证书的权限?,windows,security,certificate,Windows,Security,Certificate,我在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和Win

我在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)。

如果您只需要在证书的私钥上设置ACL权限(您的链接页面建议),我最近刚刚发布了一个关于如何实现这一点的答案

打开X509Store并获取当前证书,然后在私钥上设置ACL

您可以使用类似的方法来获取需要访问的帐户的SID(或者如果您知道它始终是网络服务,则只需使用众所周知的SID S-1-5-20):


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

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

客户端无法访问证书存储。下面的链接提到管理windows 2008 r2 mmc管理单元中的证书,并授予对相关用户帐户的访问权限。我们能够以这种方式运行调度进程,并授予运行客户端的帐户访问权

另一个解决方案是通过调度器授予程序最高级别的访问权限(安全风险),并允许它像管理员一样运行

这是上面提到的链接

您是否尝试过打开与windows服务关联的X509存储?请提供代码片段。谢谢。我没有找到一个简单的方法。这个链接:里面有一些想法。一个是使用WSE 2.0类(查看链接以查看发布的代码片段)。我没有尝试它,因为我不想安装WSE 2.0,但这里有一个我为WSE 2.0找到的下载链接:我将其标记为答案,因为您提到的帖子包含答案-使用X509Store(IntPtr)构造函数,其中,服务证书存储的句柄是使用P/Invoke打开的。
NTAccount nt = new NTAccount("NT_AUTHORITY", "NetworkService");
SecurityIdentifier sid = (SecurityIdentifier)nt.Translate(typeof(SecurityIdentifier));