Permissões mínimas para importar um certificado LocalMachine no Windows (Server)

1

Eu estou olhando para as permissões mínimas necessárias para importar um certificado em um armazenamento de máquina local particular.

A melhor informação que posso encontrar está em Trabalhando com certificados , onde diz:

Stores are protected by access control lists (ACLs), just like folders on a computer.

Mas não consigo encontrar nenhuma informação sobre como modificar a lista de ACL de uma loja . O melhor que posso encontrar está relacionado a certificados individuais, mas não é isso que eu estou procurando.

O que eu tentei até agora é tentar encontrar uma interface do usuário por meio da interface do MMC e tentar usar Get/Set-Acl Cmdlets com cert:\LocalMachine\WebHosting . O primeiro não encontrou nada, e este último falha dizendo que a pasta não suporta ACLs.

Alguma opinião?

    
por Richard Szalay 11.06.2017 / 13:11

1 resposta

1

Acontece que os armazenamentos de certificados são principalmente baseados em registro (os PKs são armazenados em disco, mas nenhum acesso especial é necessário para que possa ser ignorado) e fazem uso de ACLs de registro para acesso.

Os certificados de máquina local são todos armazenados em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\

Também descobri que não é possível conceder acesso "Gravar, mas não excluir", pois mesmo as APIs nativas usadas por X509Store.Open(ReadWrite) falharão se não estiverem definidas.

Abaixo está um script que pode ser usado para conceder acesso a certificados de importação para o armazenamento "Web Hosting":

$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
    
por 14.06.2017 / 01:04