我有一个 Azure VM,其中启用了 PowerShell 远程处理,并且 WinRM 将 HTTPS 侦听器配置为使用自签名证书。我可以使用 PowerShell 从 Internet 另一端的另一台计算机在 VM 上启动一些命令:
$cred = Get-Credential
$option = New-PSSessionOption -SkipCACheck
$psSession = New-PSSession -UseSSL -ComputerName $vmHostName -SessionOption $option -Credential $cred
Invoke-Command -Session $psSession -ScriptBlock { Write-Host $env:COMPUTERNAME }
我从安全角度阅读了 WinRM 的工作原理。与虚拟机的连接受到保护,免受被动攻击者(机密性)甚至一些主动攻击者(完整性)的攻击。尽管如此,由于忽略了签署证书的 CA,因此缺少针对 MitM(真实性)的保护。
我试图找到一个选项来将证书的指纹固定在客户端,但我发现只是-SkipCACheck
. 据我所知,winrs
甚至没有那么多。我正在考虑在客户端计算机上的 Cert:\LocalMachine\Root 中安装自签名证书,以使其受信任,但这对我公司的 DevOps 服务器代理来说可能会更困难,这些代理不由我的团队管理,而是与其他团队共享。
我到处-SkipCACheck
都 看到使用自签名证书的教程。只有少数不使用自签名证书。我想知道为什么在没有警告和提示的情况下演示这种不安全的设置。即使在服务器故障上,我的困惑也不是独一无二的。
当我需要通过公共互联网连接到虚拟机时,我应该如何操作?有没有一种安全的方法可以在 WinRM 中使用自签名证书?有没有一种简单的方法可以为计算机上的 WinRM 列表器获取受信任的证书?
只需使用受信任的证书而不是自签名的证书。
将 ACME 协议与免费 CA 之一(Let's Encrypt、ZeroSSL、Buypass Go SSL)结合使用既简单又安全。WinACME是适用于 Windows 的 ACME 客户端,它配置简单,并且具有设置和维护证书所需的所有功能。
作为 WinACME 中的证书安装步骤,即在颁发/更新证书后运行的步骤,使用WinACME安装目录中的脚本插件并传递(字面意思)作为其参数列表。剧本:
Scripts\ImportWinRM.ps1
{CertThumbprint}
一旦 WinRM 侦听器使用受信任的证书,请不要忘记
-SkipCACheck
在客户端上删除。