개인 키로 인증서를 가져 오려고하는데 내 스크립트가 "작동 중"이지만 알 수없는 내용이 누락되었습니다.개인 키로 인증서 가져 오기
KeyVault와 대화하고 인증을 위해이 인증서를 사용하는 앱이 있습니다. 내가 그 인증서에 대한 NETWORK SERVICE
할당과 함께 수동으로 PFX
을 설치하면이 인증서에 대한 암호가 잘 작동합니다. 그러나 다음 PowerShell을 사용하면 Keyset does not exist
오류가 발생합니다. 내가 인증서 관리자에서 이것을 확인하면 모든 것이 정상적으로 보인다. 분명히, UI가 뭔가 다른 일을하고있다 .. 어떤 아이디어?
편집 NETWORK SERVICE
계정을 수동으로 추가하면 정상적으로 작동합니다. 스크립트를 실행할 때 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 $_
}
답변 I이었다로, 단순히 여러 스토리지 플래그를 제공 같은 문제가 발생하는 다른 사람에 대한 :
$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