Как дать разрешение пользователю в сертификате PKCS12 с powershell? без openssl, если это возможно - PullRequest
0 голосов
/ 16 января 2020

У меня есть код, который я получил отсюда, который был / был весьма полезен, проблема в том, что он работает только для сертификатов с низким RSA, ситуация в том, что мне нужно дать разрешение пользователю в этом сертификате PKCS12, я есть дешевый способ сделать это, потому что я знаю, где ключ будет вставлен:

try{

    $vReport = $Report.startname -replace '\.\\', "$($env:computername)\"
    $Rule = new-object -typename System.Security.AccessControl.FileSystemAccessRule -Argumentlist $vReport, $Permission, Allow
    $Root = "c:\programdata\microsoft\crypto\Keys\"
    $Path = ls Cert:\LocalMachine\My\ | where {$_.thumbprint -like $Thumbprint}
    $Path | foreach {
                       $Privatekey = Get-ChildItem -Path $Root | Sort-Object -Descending LastWriteTime | select name -First 1 
                       $KeyPath = Join-Path -Path $Root -ChildPath $Privatekey.Name
                       if([io.file]::exists($KeyPath)){
                                                        $acl = get-acl -Path $KeyPath
                                                        $acl.AddAccessRule($Rule)
                                                        echo $KeyPath
                                                        set-acl -AclObject $acl -path $KeyPath   
                                                       }
                    }
} 

Catch{

       Write-Warning "An Exception was caught: $_" 

     }
}

Он работает, но один из моих коллег спросил меня: «Представьте, что мы оба на одном сервере и вставляем 2 разные сертификаты? ", если он реализует свой сертификат несколько позже c, он вставит пользователя в неправильный закрытый ключ. После долгих поисков я обнаружил, что сертификат имеет идентификатор ключа субъекта, который совпадает с ключом в реестре. Может ли это быть решением? Если так, как получить это? Потому что я без конца пытался (в рамках моих знаний).

UPDATE : обнаружил, что с помощью свойства $ _. Extension.Privatekeyidentifier вы получаете имя ключа в реестре. Другой вопрос, который у меня есть, как мне их сопоставить, чтобы он мог go в нужную папку найти ключ, который используется совместно с сертификатом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...