Ho cercato tutto intorno e non ho trovato molte informazioni, in pratica ho Windows 2008 R2, ho creato lo script PowerShell per caricare un file PFX nell'archivio certificati di Macchina locale già.Concessione autorizzazione pool di IIS 7.5 all'autorizzazione alla chiave privata del certificato utilizzando PowerShell
Ora devo concedere l'autorizzazione del mio pool di applicazioni per leggere la chiave privata del certificato utilizzando PowerShell.
Nel vecchio modo di Windows 2003, ho solo bisogno di ottenere il file effettivo seduto nella cartella C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\
, ma sembra che Win 2008 usi una cartella diversa.
Qualcuno ha qualche soluzione?
- aggiornare la mia versione di codice -
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
}
Nella mia funzione Get-CertificateStorePath
ottengo valore come C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\
, dopo che ottengo il certificato hash, il file completo si presenta come C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\d82829f7770ea5d85ef978dea67f302d_4cca7190-7e9f-46d7-b180-6656fec432e2
, quando eseguo Get-Acl
linea che ho eccezione Cannot find path 'C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\d82829f7770ea5d85ef978dea67f302d_4cca7190-7e9f-46d7-b180-6656fec432e2' because it does not exist.
.
Ho sfogliato quella cartella, non sono riuscito a trovare un file del genere.
- Aggiornamento -
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
}
Si prega di consultare il mio post aggiornato per vedere maggiori dettagli. – hardywang
Inserisci il tuo carico un file PFX codice –
Si prega di consultare il mio post aggiornato, e controllare la funzione 'Get-LocalMachineCertificate' – hardywang