在Windows中导入LocalMachine证书的最小权限(服务器)

我正在研究将证书导入特定本地机器商店所需的最小权限。

我可以find的最好的信息是在使用证书 ,它说:

存储受访问控制列表(ACL)的保护,就像计算机上的文件夹一样。

但是我找不到有关如何修改商店的ACL列表的任何信息。 我能find的最好的方法是个人证书,但那不是我所追求的。

我到目前为止所尝试的是尝试通过MMC接口来查找UI,并尝试使用带有cert:\LocalMachine\WebHosting Get/Set-Acl Cmdlet。 前者没有发现任何东西,后者没有说该文件夹不支持ACL。

有什么想法吗?

事实certificate,证书存储主要是基于registry的(PK存储在磁盘上,但不需要特殊的访问权限,因此可以忽略),并使用registryACL进行访问。

本地机器证书都存储在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\

我还发现,即使X509Store.Open(ReadWrite)所使用的本机API没有设置,它也将无法授予“Write,but not delete”访问权限。

以下是一个脚本,可用于授予对“虚拟主机”商店的导入证书的访问权限:

 $username = "SomeNonAdminUser" $acl = Get-Acl HKLM:\SOFTWARE\Microsoft\SystemCertificates\WebHosting $rule = $acl.Access | ?{ $_.IdentityReference -like "*\$username" } if ($rule) { $rule | %{ $acl.RemoveAccessRule($_) | Out-Null } } $rule = New-Object System.Security.AccessControl.RegistryAccessRule ` $username, ` [System.Security.AccessControl.RegistryRights]"CreateSubKey, ReadKey, SetValue, Delete", ` [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit", ` [System.Security.AccessControl.PropagationFlags]"None", ` "Allow" $acl.AddAccessRule($rule) $acl | Set-Acl