Передача защищенного текста между двумя серверами с PowerShell - PullRequest
0 голосов
/ 13 июня 2018

Я работаю над сценарием, который экспортирует сертификат с сервера A в PFX, копирует его на сервер B и импортирует PFX на сервер.Я использую следующий код для шифрования пароля из простого текста в защищенную строку:

$pfxPass = "PassW0rd"
$File = "D:\backup_conf\Password.txt"
[Byte[]] $key = (1..16)
$pfxSecure = $pfxPass | ConvertTo-SecureString -AsPlainText -Force
$pfxSecure | ConvertFrom-SecureString -key $key | Out-File $File
dir Cert:\LocalMachine\my | Where-Object { $_.NotAfter -clike "*2019*"} | % { certutil.exe -f -exportPFX -p $pfxSecure $_.Thumbprint D:\backup_conf\certificates\$($_.Thumbprint).pfx }

PFX создан, и я вижу, что Password.txt содержит строку хеша.PFX и Password.txt были скопированы на новый сервер, и я использовал следующий код для импорта:

$file = "D:\backup_conf\Password.txt"
[Byte[]] $key = (1..16)
$pfxSecure = Get-Content $File | ConvertTo-SecureString -Key $key
$certs = (Get-ChildItem -recurse -Path  "D:\backup_conf\certificates" -Include *.pfx)|%{Import-PfxCertificate $_.FullName -Exportable -Password $pfxSecure -CertStoreLocation Cert:\LocalMachine\My }

Этот код завершается ошибкой:

Импорт-PfxCertificate: для файла PFX, который вы пытаетесь импортировать, требуется либо другой пароль, либо членство в субъекте Active Directory, которому он защищен.

Есть идеи, почему он не работает?

1 Ответ

0 голосов
/ 13 июня 2018

Поскольку вы используете SecureString объект здесь: certutil.exe -f -exportPFX -p $pfxSecure он не распознается certutil.exe должным образом.Пароль будет буквально

System.Security.SecureString

Для приложений cmd SecureString это не то, что он может обработать, поэтому вам придется преобразовать его в простой текст, а затем передать его в certutil.exe.

Пример того, как вы можете конвертировать SecureString в обычный текст ( source ):

$SecurePassword = ConvertTo-SecureString $pfxPass 
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecurePassword)
$UnsecurePassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...