私はあちこち検索しましたが、多くの情報を見つけることができませんでした.基本的に私はWindows 2008 R2を持っています.ローカルマシンの証明書ストアにPFXファイルをロードするPowerShellスクリプトを作成しました.
ここで、PowerShell を使用して証明書の秘密キーを読み取るためのアプリ プールのアクセス許可を付与する必要があります。
古い方法の Windows 2003 では、実際のファイルをC:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\
フォルダーに格納するだけで済みますが、Win 2008 では別のフォルダーを使用しているようです。
誰かが解決策を持っていますか?
-- コードのバージョンを更新 --
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
}
私のGet-CertificateStorePath
関数ではC:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\
、証明書ハッシュを取得した後、完全なファイルは のように値を取得します。行C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\d82829f7770ea5d85ef978dea67f302d_4cca7190-7e9f-46d7-b180-6656fec432e2
を実行するGet-Acl
と、例外がありますCannot find path 'C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\d82829f7770ea5d85ef978dea67f302d_4cca7190-7e9f-46d7-b180-6656fec432e2' because it does not exist.
。
そのフォルダをブラウズしましたが、確かにそのようなファイルは見つかりませんでした。
- アップデート -
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
}