Import-PfxCertificate возвращает FileNotFoundException - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь распространить один самозаверяющий сертификат на несколько серверов в личном хранилище сертификатов набора учетных записей служб. Этот сертификат будет использоваться для расшифровки конфиденциальных файлов, которые могут быть прочитаны только учетными записями служб.

Сертификат был создан следующим образом:

New-SelfSignedCertificate -DnsName CredentialVault `
    -CertStoreLocation "Cert:\CurrentUser\My" `
    -KeyUsage KeyEncipherment,DataEncipherment -Type DocumentEncryptionCert `
    -KeyAlgorithm RSA -KeyLength 2048 
$computer = 'SERVER123.EXAMPLE.COM'
$cred = New-Object PSCredential 'MYDOMAIN\USER213', `
            $(ConvertTo-SecureString -String 'P4$$w0Rd' -AsPlainText -Force)

$scriptBlock = {
    Import-PfxCertificate -FilePath 'C:\temp\CredentialVault.pfx' `
        -Password $(ConvertTo-SecureString -String '1234' -AsPlainText -Force) `
        -CertStoreLocation "Cert:\CurrentUser\My"
}

Invoke-Command -ComputerName $computer -Credential $cred -ScriptBlock $scriptBlock 

Я выполнял код на сервере SERVER123.EXAMPLE.COM (но с другой учетной записью), просто чтобы посмотреть, будет ли он работать, прежде чем пытаться использовать удаленные серверы. Вот почему путь к файлу относится к локальному файлу.

Однако, несмотря на то, что файл доступен для учетной записи MYDOMAIN\USER213 (я тестировал команду Import-PfxCertificate непосредственно на том же сервере с этим пользователем в первую очередь) PowerShell возвращает System.IO.FileNotFoundException, как вы можете видеть ниже.

The PFX file could not be found.
    + CategoryInfo          : NotSpecified: (:) [Import-PfxCertificate], FileNotFoundException
    + FullyQualifiedErrorId : System.IO.FileNotFoundException,Microsoft.CertificateServices.Commands.ImportPfxCertificate
    + PSComputerName        : SERVER123.EXAMPLE.COM

Я понятия не имею, в чем проблема. Предложения приветствуются!

Информация о версии:

  • Windows Сервер 2016
  • PowerShell 5.1.14393.3471

Ответы [ 2 ]

0 голосов
/ 01 марта 2020

Я решил, что сначала скопировал файл в удаленную систему через PSSession.

До сих пор не знаю, почему это работает, а оригинальный код - нет. ¯ \ _ (ツ) _ / ¯

$certFile = 'C:\temp\CredentialVault.pfx'
$remoteFile = [System.IO.Path]::Combine('C:\Temp', [System.IO.Path]::GetFileName($certFile))
$certPassword = $(ConvertTo-SecureString -String '1234' -AsPlainText -Force)
$cred = Get-Credential

$sess = New-PSSession -ComputerName $server -Credential $cred
try {
    Copy-Item -Path $certFile -ToSession $sess -Destination $remoteFile
    Invoke-Command -Session $sess -ScriptBlock {
        Import-PfxCertificate -FilePath $remoteFile `
                              -Password $certPassword `
                              -CertStoreLocation "Cert:\CurrentUser\My"
        Remove-Item $remoteFile
    }
}
finally {
    Remove-PSSession $sess
}
0 голосов
/ 27 февраля 2020

Можно попробовать в пути использовать переменную $env:HOMEDRIVE\temp\CredentialVault.pfx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...