Я оберточной мою голову вокруг автоматизации способа выполнить эту задачу:Импорт PFX Сертификат в отдельный CurrentUser - Личный магазин (PowerShell)
Мы используем Windows Server 2008 R2 изображений для наших клиентов. Мы используем PowerShell (версия 2) для развертывания нашего проприетарного программного обеспечения и внесения различных изменений в систему перед отправкой. Этот процесс PowerShell запускается под учетной записью локального администратора, пока он не завершит работу и не отключит локальную учетную запись администратора.
Теперь о проблеме - я пытаюсь установить сертификат клиента .PFX в хранилище сертификатов CurrentUser \ My хранилища SEPARATE. Назовем этого пользователя «SQL».
В настоящий момент сертификат устанавливается в хранилище сертификатов LocalMachine \ My, но одна из наших групп разработчиков обеспокоена этой позицией и хотела бы воспроизвести первоначальную настройку.
Теперь я знаю, как сделать это грязным, добавив в перезагрузочный шаг наш сценарий развертывания и выполнив его под пользователем SQL, но я хотел бы избежать этого, поскольку кажется, что должно быть способ сделать это в другой учетной записи. Вот базовый код, который мы используем сейчас, чтобы установить сертификат в LocalMachine \ My store. Предположим, что $ certPath - это путь к .pfx, а $ pfxPass - пароль .pfx.
function Import-PfxCertificate {
param([string] $certPath, [string]$pfxPass)
$pfx = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$pfx.Import([string]$certPath, [string]$pfxPass, "Exportable,PersistKeySet")
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store("My", "LocalMachine")
$store.open("MaxAllowed")
$store.add($pfx)
$store.close()
}
Я думаю, что вам нужно будет запустить этот код * как * пользователя, которому вы хотите добавить сертификаты. Итак, следующий вопрос: у вас есть учетные данные пользователя или нет? – briantist
Если вы посмотрите на определение для этого класса сертификатов x509, вы увидите, что нет даже перечисления для поддержки чего-либо помимо текущего пользователя и локального компьютера. Я считаю, что единственным способом добиться этого было бы олицетворять другого пользователя - или в powershell гораздо более простой способ - просто создать новый-pssession с их учетными данными, но для этого потребуется имя пользователя/пароль (в любом случае) для загрузить свою сессию –
Briantist/Bill - Да, у меня есть учетные данные, и я понимаю, как правильно передать учетные данные.Я также понимаю, что мне нужно будет изменить «LocalMachine» на «CurrentUser», который достаточно прост. Однако, если кто-либо из вас может помочь с примером взятия сценария выше и его запуска под новой PSSession или с помощью Start-Job с ScriptBlock, это было бы полезно. Я попытался получить Start-Job с ScriptBlock, чтобы работать пару дней назад, но я продолжал получать разные сообщения об ошибках о недопустимых аргументах. –