it-swarm-eu.dev

Jak udělit oprávnění uživateli na certifikát soukromého klíče pomocí powerhell?

Certifikát je již nainstalován na stroji. Nyní chci dát oprávnění ke čtení na PrivateKey certifikátu pro uživatele aplikace.

14
Balpreet Patil

Zde je odpověď.

Vytvořen soubor skriptu powerhell AddUserToCertificate.ps1

Zde je obsah souboru skriptu.

param(
    [string]$userName,
    [string]$permission,
    [string]$certStoreLocation,
    [string]$certThumbprint
);
# check if certificate is already installed
$certificateInstalled = Get-ChildItem cert:$certStoreLocation | Where thumbprint -eq $certThumbprint

# download & install only if certificate is not already installed on machine
if ($certificateInstalled -eq $null)
{
    $message="Certificate with thumbprint:"+$certThumbprint+" does not exist at "+$certStoreLocation
    Write-Host $message -ForegroundColor Red
    exit 1;
}else
{
    try
    {
        $rule = new-object security.accesscontrol.filesystemaccessrule $userName, $permission, allow
        $root = "c:\programdata\Microsoft\crypto\rsa\machinekeys"
        $l = ls Cert:$certStoreLocation
        $l = $l |? {$_.thumbprint -like $certThumbprint}
        $l |%{
            $keyname = $_.privatekey.cspkeycontainerinfo.uniquekeycontainername
            $p = [io.path]::combine($root, $keyname)
            if ([io.file]::exists($p))
            {
                $acl = get-acl -path $p
                $acl.addaccessrule($rule)
                echo $p
                set-acl $p $acl
            }
        }
    }
    catch 
    {
        Write-Host "Caught an exception:" -ForegroundColor Red
        Write-Host "$($_.Exception)" -ForegroundColor Red
        exit 1;
    }    
}

exit $LASTEXITCODE

Nyní jej spusťte jako součást nasazení. Příklad pro spuštění nad skriptem v okně conshell conshell. 

C:\>.\AddUserToCertificate.ps1 -userName testuser1 -permission read -certStoreLocation \LocalMachine\My -certThumbprint 1fb7603985a8a11d3e85abee194697e9784a253

tento příklad dá read permission to user testuser1 na certifikát, který je nainstalován v LocalMachine Můj a má palcový tisk 1fb7603985a8a11d3e85abee194697e9784a253

Pokud používáte ApplicationPoolIdentity, pak uživatelské jméno bude 'IIS AppPool AppPoolNameHere'

Poznámka : Budete muset použít '' , protože existuje mezera mezi IIS a AppPool.

23
Balpreet Patil

Výše uvedená odpověď pro mě nefungovala, protože $_.privatekey vrátil hodnotu null. Podařilo se mi získat přístup k soukromému klíči a přidělit oprávnění ke čtení pro fond aplikací takto: 

param (
[string]$certStorePath  = "Cert:\LocalMachine\My",
[string]$AppPoolName,
[string]$certThumbprint
)

Import-Module WebAdministration

$certificate = Get-ChildItem $certStorePath | Where thumbprint -eq $certThumbprint

if ($certificate -eq $null)
{
    $message="Certificate with thumbprint:"+$certThumbprint+" does not exist at "+$certStorePath
    Write-Host $message -ForegroundColor Red
    exit 1;
}else
{
    $rsaCert = [System.Security.Cryptography.X509Certificates.RSACertificateExtensions]::GetRSAPrivateKey($certificate)
    $fileName = $rsaCert.key.UniqueName
    $path = "$env:ALLUSERSPROFILE\Microsoft\Crypto\Keys\$fileName"
    $permissions = Get-Acl -Path $path

    $access_rule = New-Object System.Security.AccessControl.FileSystemAccessRule("IIS AppPool\$AppPoolName", 'Read', 'None', 'None', 'Allow')
    $permissions.AddAccessRule($access_rule)
    Set-Acl -Path $path -AclObject $permissions
}
10
Michael Armitage

Jako alternativa k výše uvedenému skriptu. Můžete použít modul PowerShell. Nezkoušel jsem to sám, ale modul vypadá dobře. http://get-carbon.org/index.html

Zde je příkaz pro nastavení oprávnění http://get-carbon.org/Grant-Permission.html

2
Balpreet Patil

Můžete použít WinHttpCertCfg.exe, nástroj pro konfiguraci certifikátů Odkaz: https://docs.Microsoft.com/en-us/windows/desktop/winhttp/winhttpcertcfg-exe--a-certificate-configuration -nástroj

Některé příklady kódu:

Set privatekeyAcces to Svc-LocalAgent$@mydomain.local
*.\WinHttpCertCfg.exe -g -c LOCAL_MACHINE\MY -s *.d365.mydomain.com  -a "Svc-LocalAgent$@mydomain.com"*
1
Barreto