it-swarm.com.de

So erteilen Sie einem Benutzer die Berechtigung für den privaten Zertifikatschlüssel mithilfe von Powershell?

Das Zertifikat ist bereits auf dem Computer installiert. Jetzt möchte ich dem Benutzer der Anwendung die Leseberechtigung für PrivateKey of Certificate erteilen.

14
Balpreet Patil

Hier ist die Antwort.

Erstellt eine Powershell-Skriptdatei AddUserToCertificate.ps1

Hier ist der Inhalt für die Skriptdatei.

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

Führen Sie es jetzt als Teil der Bereitstellung aus. Beispiel für die Ausführung des obigen Skripts im Powershell-Konsolenfenster. 

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

in diesem Beispiel geben Sie read Erlaubnis für den Benutzer testuser1 auf dem Zertifikat, das in\LocalMachine\My installiert ist und einen Daumendruck hat 1fb7603985a8a11d3e85abee194697e9784a253

Wenn Sie ApplicationPoolIdentity verwenden, lautet Ihr Benutzername 'IIS AppPool\AppPoolNameHere'

Hinweis : Sie müssen '' verwenden, da zwischen IIS und AppPool ein Leerzeichen steht.

23
Balpreet Patil

Die obige Antwort funktionierte nicht für mich, da $_.privatekey null zurückgab. Es ist mir gelungen, auf den privaten Schlüssel zuzugreifen und meinem Anwendungspool die Leseberechtigungen zuzuweisen. 

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

Als Alternative zum obigen Skript. Sie können das PowerShell-Modul verwenden. Ich habe es selbst nicht ausprobiert, aber das Modul sieht gut aus . http://get-carbon.org/index.html

Hier ist der Befehl zum Festlegen von Berechtigungen http://get-carbon.org/Grant-Permission.html

2
Balpreet Patil

Sie können WinHttpCertCfg.exe, ein Zertifikat-Konfigurationstool, verwendenLink: https://docs.Microsoft.com/en-us/windows/desktop/winhttp/winhttpcertcfg-----certificate-configuration-tool

Einige Codebeispiele:

Set privatekeyAcces to [email protected]
*.\WinHttpCertCfg.exe -g -c LOCAL_MACHINE\MY -s *.d365.mydomain.com  -a "[email protected]"*
1
Barreto