狂自私

导航

PowerShell启用https

 

仍旧是参考的国外的博客,之前看国内博客,写到不是很明了,有些使用iis来生成自签名证书,也有使用PowerShell生成,但是最后都配置失败了。

PowerShell在 Https 上重新调用, 自签名的 Ssl 证书|4个音息 (4sysops.com)

这个,启用了https之后的缺陷就是,不能按照IP地址去连接,只能按照主机名,对于网络情况复杂的网络环境来说很不方便。

我配置过程中使用的命令:

$Cert = New-SelfSignedCertificate -CertstoreLocation Cert:\LocalMachine\My -DnsName "server-hs"

#生成证书

Export-Certificate -Cert $Cert -FilePath C:\Users\Administrator\Documents\server.crt

#导出证书

Enable-PSRemoting -SkipNetworkProfileCheck -Force

#开启PowerShell的远程功能,且跳过网络检查,这里如果网络模式为公用网络,在后面的连接时会被阻止的

dir wsman:\localhost\listener

#查看监听情况

Get-ChildItem WSMan:\Localhost\listener | Where -Property Keys -eq "Transport=HTTP" | Remove-Item -Recurse

#删除http监听

dir wsman:\localhost\listener

#检查

New-Item -Path WSMan:\LocalHost\Listener -Transport HTTPS -Address * -CertificateThumbPrint $Cert.Thumbprint –Force

#创建https监听配置,并将证书哈希添加进去

New-NetFirewallRule -DisplayName "Windows Remote Management (HTTPS-In)" -Name "Windows Remote Management (HTTPS-In)" -Profile Any -LocalPort 5986 -Protocol TCP

#创建防火墙规则 -name后面的名称可以改一下,实际上默认情况下,已经有这个规则了。

Set-Item WSMan:\localhost\Service\EnableCompatibilityHttpsListener -Value true

#允许https监听

Disable-NetFirewallRule -DisplayName "Windows 远程管理(HTTP-In)"

#删除http监听的防火墙规则

Import-Certificate -Filepath "C:\Users\Administrator\Documents\server.crt" -CertStoreLocation "Cert:\LocalMachine\Root"

#导入证书到本地证书管理器中

Enter-PSSession -ComputerName server-hs -Credential Administrator -UseSSL

#连接

 

 

 

 

在远程计算机上

我们需要做的第一件事是创建一个SSL证书。(请注意,本指南侧重于使用自签名证书。如果你有一个公开签名的证书,事情就更容易了,你可以使用设置-WSManQuick自信-使用SL

如上所述,自 PowerShell 4 发布以来,我们不需要为此目的使用第三方工具。新的自我签名的认证厘米是所有我们需要的:

1

$Cert = New-SelfSignedCertificate -CertstoreLocation Cert:\LocalMachine\My -DnsName "myHost"

将要远程管理的计算机名称传递到-DnsName参数非常重要。如果计算机有 DNS 名称,则应使用完全合格的域名 FQDN)。

如果需要,您可以使用 Microsoft 管理控制台 MMC 的证书插件验证证书是否正确存储。在"开始"屏幕上键入mmc并添加计算机帐户和本地计算机的证书附加组件。证书应位于个人证书文件夹中。我的测试电脑的名字是"win81"

远程计算机上的 MMC 证书

我们现在必须将证书导出到文件中,因为以后我们将不得不在当地的机器上导入证书。您可以通过 MMC 插件做到这一点,但我们会在电源壳中这样做:

1

Export-Certificate -Cert $Cert -FilePath C:\temp\cert

这里的文件名称并不重要。

我们需要证书来启动WS管理HTTPS听众。但是,我们应该首先启用主机上的电源壳重塑:

1

Enable-PSRemoting -SkipNetworkProfileCheck -Force

正如我最近了解到的-跳过网络工作档案检查确保电源壳不会抱怨,如果你的网络连接类型设置为公共。

启用-PS恢复也启动一个WS管理听众,但仅针对HTP。如果需要,您可以通过阅读 WSMan 驱动器的内容来验证这一点:

1

dir wsman:\localhost\listener

列出 WSMAN 听众

为了确保没有人使用 HTTP 连接到计算机,您可以以这种方式删除 HTTP 侦听器:

1

Get-ChildItem WSMan:\Localhost\listener | Where -Property Keys -eq "Transport=HTTP" | Remove-Item -Recurse

此命令删除所有 WSMan 听众:

1

Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse

接下来,我们添加我们的WSMan HTTPS听众:

1

New-Item -Path WSMan:\LocalHost\Listener -Transport HTTPS -Address * -CertificateThumbPrint $Cert.Thumbprint –Force

添加一个WS曼赫特普斯听众

我们使用我们之前定义的$Cert变量来读取拇指印,它允许新项目cmdlet 在我们的证书存储中定位证书。

我们要做的最后一件事是在主机上配置防火墙,因为启用-PS重新调制厘米删除仅添加了 HTTP 的规则:

1

New-NetFirewallRule -DisplayName "Windows Remote Management (HTTPS-In)" -Name "Windows Remote Management (HTTPS-In)" -Profile Any -LocalPort 5986 -Protocol TCP

请注意,我们允许在 5986 号港口进行入境交通。WinRM 1.1(当前版本为3.0)使用通用的HTTPS端口443。如果主机位于阻止端口 5986 的网关防火墙后面,您仍然可以使用此端口:

1

Set-Item WSMan:\localhost\Service\EnableCompatibilityHttpsListener -Value true

当然,您必须打开 Windows 防火墙中的端口 443。请注意,如果此机器上的网络连接类型设置为"公共",此命令将无法工作。在这种情况下,您必须将连接类型更改为私有:

1

Set-NetConnectionProfile -NetworkCategory Private

出于安全原因,您可能需要禁用启用PS重新启用的HTTP 的防火墙规则:

1

Disable-NetFirewallRule -DisplayName "Windows Remote Management (HTTP-In)"

我们的远程机器现已准备好通过 HTTPS 进行电源壳重新调用,我们可以配置本地计算机。

在当地计算机上

这里的事情有点容易。首先,您必须复制我们出口证书的证书文件。然后,您可以通过此命令导入证书:

1

Import-Certificate -Filepath "C:\temp\cert" -CertStoreLocation "Cert:\LocalMachine\Root"

请注意,我们需要将证书存储在此处的受信任根认证机构文件夹中,而不是像在远程计算机上那样存储在个人文件夹中。您的计算机"信任"所有能够通过私人密钥(存储在主机上)和存储在这里的证书来证明其真实性的机器。

本地计算机上的 MMC 证书

顺便说一下,这就是为什么我们不必将远程计算机添加到"可信的热"列表中的原因。与在 HTTP 上进行电源壳重新调用相比,我们可以确定远程机器是它声称的,这是使用 HTTPS 而不是 HTTP 的主要点。

我们现在准备通过 HTTPS 在远程计算机上输入电源壳会话:

1

Enter-PSSession -ComputerName myHost -UseSSL -Credential (Get-Credential)

这里的关键参数是-使用SL当然,我们仍然需要在远程计算机上通过管理员帐户进行身份验证。

您可能会收到此错误消息:

SSL 证书由未知证书机构签署。

在这种情况下,您可以添加-跳过CA检查参数。(请参阅下面的评论

调用命令厘米删除还支持-使用SSL参数:

1

Invoke-Command -ComputerName myHost -UseSSL -ScriptBlock {Get-Process} -Credential (Get-Credential)

如果您的远程主机没有 DNS 条目,则可以将其 IP 添加到本地计算机上的主机文件中。为此,请打开一个高架记事本,然后导航到 %系统根 32+系统 32+驱动程序等。当然,如果您正在高架控制台上工作,您也可以使用 PowerShell 进行操作:

1

Add-Content $Env:SystemRoot\system32\drivers\etc\hosts "10.0.0.1 myHost"

之后您必须重新启动。我有我自己的私人DNS服务器在云中为此类情况。

posted on 2021-06-02 14:14  狂自私  阅读(809)  评论(0编辑  收藏  举报