2016-09-09 2 views
1

Я пытаюсь установить сертификат с помощью PowerShell. Я тестирую установку, создавая удаленный сеанс с моим собственным компьютером. Я знаю, что команда правильная, потому что за пределами удаленного сеанса она успешно устанавливает сертификат. Когда я удаленный сеанс на мой собственный компьютер я получаю сообщение об ошибке:Как установить сертификат на удаленном компьютере с помощью PowerShell?

Access is denied. 0x80070005 (WIN32: 5 ERROR_ACCESS_DENIED). This may be the result of user credentials being required on the remote machine. See Enable-WSManCredSSP Cmdlet help on how to enable and use CredSSP for delegation with PowerShell remoting.

Если я запускаю эту команду без удаленного сеанса он работает:

Import-PfxCertificate -FilePath "\\network\storage\site.com.pfx" -CertStoreLocation "Cert:\\LocalMachine\\WebHosting" -Password (ConvertTo-SecureString -String "foobar" -AsPlainText -Force) 

Когда я выполнить команду (через Invoke-Command) с удаленным сеансом я получаю указанную выше ошибку:

$session = New-PSSession $Env:ComputerName 
Invoke-Command -Session $session -ScriptBlock { Import-PfxCertificate -FilePath "\\network\storage\site.com.pfx" -CertStoreLocation "Cert:\\LocalMachine\\WebHosting" -Password (ConvertTo-SecureString -String "foobar" -AsPlainText -Force) } 

Как мне решить эту проблему?

ответ

2

У вас возникла так называемая проблема с двойной аутентификацией. Если вы используете обычную проверку подлинности, вы не сможете выполнить аутентификацию на втором компьютере с компьютера, на который вы вызываете команду.

Для решения этой проблемы вы можете использовать CredSSP.

Чтобы включить CredSSP на машине, которая в настоящее время называется:

Enable-WSManCredSSP -Role Server -force 

Чтобы включить CredSSP на клиенте:

Enable-WSManCredSSP -Role Client -DelegateComputer server.domain.com -force 

Параметр -delegateComputer ожидает полное доменное имя, но и принимает групповые символы.

После включения CredSSP вы можете использовать его, чтобы вызвать вашу команду с параметром -authentication CredSSP

+0

В дополнение к этому ответу, если вы хотите знать, как и почему это работает, ознакомьтесь с разделом «Секреты удаленного доступа Powershell» здесь: https://devopscollective.gitbooks.io/secrets-of-powershell-remoting/ content/manuscript/accessing-remote-computers.html, особенно последние два раздела. – Astrotrain

+0

Спасибо за ответ Пол. Я предполагаю, что не могу запустить эту команду enable через удаленный сеанс (например, проблема с курицей и яйцом)? Мы ищем полную автоматизацию нашей настройки сервера и приложений, поэтому мне, возможно, придется подойти к этому по-разному с помощью групповой политики или других средств. –

+0

@ JustinHelgerson не уверен на 100%, но я думаю, что вы правильно относитесь;) Групповая политика - это путь: https://msdn.microsoft.com/en-us/library/windows/desktop/bb204773(v= vs.85) .aspx – Paul

0

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

Set-Location "c:\windows\system32" 
#if certificate is missing, will install wild card certificate into the store 
icacls 'C:\ProgramData\Microsoft\Crypto\Keys' /save C:\ProgramData\Microsoft\Crypto\Keys\ACLfile_for_Keys_Dir /T 
takeown /f C:\ProgramData\Microsoft\Crypto\Keys\*.* 
icacls 'C:\ProgramData\Microsoft\Crypto\Keys\*.*' /grant 'Network Service:(R)' 
#icacls C:\ProgramData\Microsoft\Crypto /restore C:\ProgramData\Microsoft\Crypto\Keys\ACLfile_for_Keys_Dir #(restores original ACL for recovery) 
icacls 'C:\ProgramData\Microsoft\Crypto\keys' /setowner system 
icacls 'C:\ProgramData\Microsoft\Crypto\keys\*.*' /setowner system 

Две строки, прокомментированные, были моим планом отвода в случае, если что-то пошло не так.

Смежные вопросы