当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 通过 HTTPS 配置 PowerShell 远程处理 (WinRM)

作者:精品下载站 日期:2024-12-14 23:18:22 浏览:15 分类:玩电脑

通过 HTTPS 配置 PowerShell 远程处理 (WinRM)


默认情况下,无论使用 HTTP (TCP/5985) 还是 HTTPS (TCP/5986) 传输协议,PowerShell Remoting 会话中的流量都会加密。无论如何,所有流量均使用 AES-256 密钥加密。但是,如果您连接到 AD 林外部或工作组中的远程计算机(Kerberos 无法与之建立信任关系),则您将面临中间人攻击的风险。 Microsoft 建议在连接到第三方计算机时始终对 PSRemoting 使用 HTTPS 传输。

在本文中,我们将展示如何使用 SSL 证书通过 HTTPS 配置 PowerShell Remoting。当连接到 AD 域/林之外的计算机时,通过 HTTPS 的 PSRemoting 会话可提供更高的会话安全级别。

以下步骤描述了如何使用 PowerShell Remoting over HTTPS 配置要连接的运行 Windows 的远程设备。

确保您在 Windows 中的网络位置设置为专用或域:

Get-NetConnectionProfile

使用以下命令启用 WinRM 和 PSRemoting:

Enable-PSRemoting -Force

在域中,您可以使用 GPO 配置 WinRM。

要为 WinRM 配置 HTTPS,首先需要在要连接的计算机上创建 SSL 证书。该证书将用于加密 WinRM 流量。使用 PowerShell 创建自签名证书更容易。在域环境中,您可以使用自动注册自动颁发 WinRM 证书。

指定计算机名称及其 IP 地址作为证书的 DNS 名称(如果您的网络没有 DNS 服务器,这会很方便)。您可以获取证书的使用者备用名称的两个值并使用 PowerShell 生成自签名证书:

$hostName = $env:COMPUTERNAME
$hostIP=(Get-NetAdapter| Get-NetIPAddress).IPv4Address|Out-String
$srvCert = New-SelfSignedCertificate -DnsName $hostName,$hostIP -CertStoreLocation Cert:\LocalMachine\My
$srvCert

新的 SSL 证书将出现在计算机上的个人证书存储中。

[玩转系统] 通过 HTTPS 配置 PowerShell 远程处理 (WinRM)

默认情况下,会在不同端口上为 Windows 中的 PowerShell 远程处理创建两个侦听器:

  • 端口 5985 上的 HTTP

  • 端口 5986 上的 HTTPS

您可以获得活动 WSMan 侦听器的列表,如下所示:

Get-ChildItem wsman:\localhost\Listener

删除默认的 HTTP 和 HTTPS 侦听器:

Get-ChildItem wsman:\localhost\Listener\ | Where-Object -Property Keys -like 'Transport=HTTP*' | Remove-Item -Recurse

创建一个新的 HTTPS 侦听器并将您的证书绑定到它:

New-Item -Path WSMan:\localhost\Listener\ -Transport HTTPS -Address * -CertificateThumbPrint $srvCert.Thumbprint -Force

[玩转系统] 通过 HTTPS 配置 PowerShell 远程处理 (WinRM)

创建允许 WinRM HTTPS 流量的 Windows 防火墙规则或确保其处于活动状态:

New-NetFirewallRule -Displayname 'WinRM - Powershell remoting HTTPS-In' -Name 'WinRM - Powershell remoting HTTPS-In' -Profile Any -LocalPort 5986 -Protocol TCP

重新启动 WinRM 服务:

Restart-Service WinRM

您可以使用以下命令检查 WinRM HTTPS 侦听器绑定到哪个证书指纹:

WinRM e winrm/config/listener

远程主机已配置。现在您必须将 SSL 证书导出到 CER 文件:

Export-Certificate -Cert $srvCert -FilePath c:\PS\SSL_PS_Remoting.cer

请记住,WinRM 服务器和客户端配置不允许未加密的连接(默认情况下):

dir WSMan:\localhost\Service | ? Name -eq AllowUnencrypted
dir WSMan:\localhost\Client | ? Name -eq AllowUnencrypted

[玩转系统] 通过 HTTPS 配置 PowerShell 远程处理 (WinRM)

如有必要,您可以禁用未加密的连接,如下所示:

winrm set winrm/config/service '@{AllowUnencrypted="false"}'
winrm set winrm/config/client '@{AllowUnencrypted="false"}

'

将 CER 文件复制到管理计算机并使用以下命令将其导入(或使用 GPO 将证书部署到其他计算机):

Import-Certificate -FilePath c:\PS\SSL_PS_Remoting.cer -CertStoreLocation Cert:\LocalMachine\root\

然后,要使用 WinRM HTTPS 连接到远程 Windows 主机,必须在 Enter-PSSession 和 Invoke-Command cmdlet 中使用 -UseSSL 参数。在以下示例中,我们将通过 PowerShell 控制台的 IP 地址连接到远程主机(请注意,我们尚未将此 IP 地址添加到 TrustedHosts):

$SessionOption = New-PSSessionOption -SkipCNCheck
Enter-PSSession -Computername 192.168.13.4 -UseSSL -Credential maxbak -SessionOption $SessionOption

[玩转系统] 通过 HTTPS 配置 PowerShell 远程处理 (WinRM)

当通过不带 SkipCNCheck 选项的 IP 地址进行连接时,会出现以下错误:

The SSL certificate contains a common name (CN) that does not match the hostname

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯