私は秘密鍵で証明書をインポートしようとしていますが、私のスクリプトは「働いています」とは分かりません。秘密鍵で証明書をインポートする
私はKeyVaultと通話し、この証明書を承認用に使用するアプリを持っています。私は上記の証明書のパスワードを持っています。PFX
を手動でインストールするときには、NETWORK SERVICE
アカウントの許可を割り当てても問題ありません。ただし、次のPowerShellを使用するとエラーKeyset does not exist
が発生します。私が証明書マネージャーの下でこれをチェックすると、すべてが正常に見えます。明らかに、UIは何か異なることをやっています..任意のアイデア?
編集 アカウントを手動で追加すると、正常に動作します。私はスクリプトを実行するとPowerShellは管理者モードで実行されているので、おそらくその奇妙な点がありますか?
スクリプト
cls
$certName = "certname.pfx"
$path = "C:\Certificates\$certName"
$serviceAccount = 'NETWORK SERVICE'
$permissionType = 'Read'
$password = 'somepassword'
try {
# Import the certificate maintaining the private key format
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($path, $password, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]"PersistKeySet")
# Add the cert to personal store location
$store = Get-Item Cert:\LocalMachine\My
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]"ReadWrite")
$store.Add($cert)
$store.Close()
# Get SecurityIdentifier value from current username
$currentUser = New-Object System.Security.Principal.NTAccount($env:USERNAME)
$strSID = $currentUser.Translate([System.Security.Principal.SecurityIdentifier])
$path = "$env:USERPROFILE\AppData\Roaming\Microsoft\Crypto\RSA\$($strSID.Value)\$($cert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName)"
$acl = Get-Acl $path
$rule = New-Object Security.AccessControl.FileSystemAccessRule $serviceAccount, 'FullControl', Allow
$acl.AddAccessRule($rule)
Set-Acl $path $acl
Write-Host "Cert installed, press any key to continue" -ForegroundColor Green
Read-Host
}
catch {
Write-Error -Message $_
}
ANSWER私があったように、単に複数のストレージフラグ提供同じ問題が発生して他人のために :
$flags = @([System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]"MachineKeySet", [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]"PersistKeySet")
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($path, $password, $flags)
どこでエラーが発生しますか? – bartonjs
私のアプリケーションを実行します。スクリプトは正常に実行されますが、手動で処理するとNETWORK SERVICEアカウントを正しく追加していません。 –
はい、どの行/どのステップですか? – bartonjs