Ric*_*lay 5 windows-server-2008
我正在研究将证书导入特定本地机器存储所需的最低权限。
我能找到的最好的信息是Working with Certificates,它说:
存储区受访问控制列表 (ACL) 的保护,就像计算机上的文件夹一样。
但是我找不到有关如何修改store的 ACL 列表的任何信息。我能找到的最好的与个人证书有关,但这不是我所追求的。
到目前为止,我尝试过的是尝试通过 MMC 界面查找 UI,并尝试将Get/Set-AclCmdlets 与cert:\LocalMachine\WebHosting. 前者一无所获,后者未能说明该文件夹不支持 ACL。
有什么想法吗?
事实证明,证书存储主要基于注册表(PK 存储在磁盘上,但不需要特殊访问,因此可以忽略),并使用注册表 ACL 进行访问。
本地机器证书都存储在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\
我还发现不可能授予“写入,但不能删除”访问权限,因为X509Store.Open(ReadWrite)如果未设置,即使使用的本机 API 也会失败。
下面是一个脚本,可用于授予对“虚拟主机”存储导入证书的访问权限:
$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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2639 次 |
| 最近记录: |