Przeszukałem wszystko i nie mogłem znaleźć wielu informacji, zasadniczo mam system Windows 2008 R2, stworzyłem skrypt PowerShell, aby załadować plik PFX do magazynu certyfikatów Lokalna maszyna już.Przydzielenie puli aplikacji Grant IIS 7.5 Uprawnienia do certyfikatu Klucz prywatny przy użyciu PowerShell
Teraz muszę zezwolić mojej puli aplikacji na odczytanie klucza prywatnego certyfikatu za pomocą PowerShell.
W starym systemie Windows 2003, po prostu potrzebuję uzyskać rzeczywisty plik siedzący w folderze C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\
, ale wygląda na to, że Win 2008 używa innego folderu.
Ktoś ma jakieś rozwiązanie?
- Aktualizacja moją wersję kodu -
function Grant-CertificatePermissions([string]$certSubject,[string]$user,[string]$permissionType,[string]$permission = $args[3])
{
$getCert = Get-LocalMachineCertificate $certSubject
$keypath = Get-CertificateStorePath
$certHash = $getCert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
$certFullPath = $keypath+$certHash
$certAcl = Get-Acl -Path $certFullPath
try
{
$accessRule=new-object System.Security.AccessControl.FileSystemAccessRule $user, $permissionType, $permission
$certAcl.AddAccessRule($accessRule)
}
catch [System.Exception]
{
throw "Invalid User Id Or Permission"
}
Set-Acl $certFullPath $certAcl
}
function Get-LocalMachineCertificate([string]$subject, [string]$certificateStoreLocation, [string]$certificateStoreName)
{
$getCert = Get-ChildItem -Recurse Cert:\$certificateStoreLocation\$certificateStoreName | Where-Object {$_.Subject -eq $subject}
if(!$getCert)
{
throw "Certificate Not Found"
}
return $getCert
}
function Get-CertificateStorePath
{
$commonCertPathStub = "\Microsoft\Crypto\RSA\MachineKeys\"
$programData = $Env:ProgramData
if(!$programData)
{
$programData = $Env:ALLUSERSPROFILE + "\Application Data"
}
$keypath = $programData + $commonCertPathStub
return $keypath
}
W moim Get-CertificateStorePath
funkcji otrzymuję wartość jako C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\
, po tym, jak uzyskać certyfikat hash, kompletny plik wygląda C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\d82829f7770ea5d85ef978dea67f302d_4cca7190-7e9f-46d7-b180-6656fec432e2
, kiedy wykonać Get-Acl
linię mam wyjątek Cannot find path 'C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\d82829f7770ea5d85ef978dea67f302d_4cca7190-7e9f-46d7-b180-6656fec432e2' because it does not exist.
.
Przeglądałem ten folder, naprawdę nie mogłem znaleźć takiego pliku.
- Update -
function Import-PfxCertificate ([String]$certPath,[String]$certificateStoreLocation ,[String]$certificateStoreName, $pfxPassword)
{
$pfx = new-object System.Security.Cryptography.X509Certificates.X509Certificate2
$pfx.Import($certPath, $pfxPassword, "Exportable,PersistKeySet")
$store = new-object System.Security.Cryptography.X509Certificates.X509Store($certificateStoreName,$certificateStoreLocation)
$store.open("MaxAllowed")
$store.add($pfx)
$store.close()
return $pfx
}
Proszę zobaczyć mój zaktualizowany wpis, aby zobaczyć więcej szczegółów. – hardywang
Prześlij swój ładunek kod pliku PFX –
Zobacz mój zaktualizowany post i sprawdź funkcję 'Get-LocalMachineCertificate' – hardywang