我尝试使用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) }
如何解决此权限问题?
答案 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
如果出现问题,请注意两条线是我的退出计划。