如何使用PowerShell在远程计算机上安装证书?

时间:2016-09-09 18:20:42

标签: powershell certificate powershell-v5.0

我尝试使用PowerShell安装证书。我通过使用自己的计算机创建远程会话来测试安装。我知道命令是正确的,因为在远程会话之外它成功安装了证书。当我对自己的计算机进行远程会话时,收到错误:

  

访问被拒绝。 0x80070005(WIN32:5 ERROR_ACCESS_DENIED)。这可能是远程计算机上需要用户凭据的结果。看到   Enable-WSManCredSSP Cmdlet有关如何使用PowerShell远程处理启用和使用CredSSP进行委派的帮助。

如果我在没有远程会话的情况下运行此命令,则可以正常运行:

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 个答案:

答案 0 :(得分:2)

您遇到了所谓的双跳身份验证问题。如果使用普通身份验证,您将无法从正在调用命令的计算机上对第二台计算机进行身份验证。

要解决此问题,您可以使用CredSSP。

在正在调用的计算机上启用CredSSP:

Enable-WSManCredSSP -Role Server -force

在客户端启用CredSSP:

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

-delegateComputer参数需要FQDN,但也需要使用通配符。

启用CredSSP后,您可以使用它来使用参数-authentication CredSSP

调用您的命令

答案 1 :(得分:0)

我有时间试图解决权限问题并最终朝着不同的方向前进。在修改权限时存在一个缺陷\错误。无法记住所有细节,但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

如果出现问题,请注意两条线是我的退出计划。