HTTPS Üzerinden PowerShell Uzaktan İletişimini (WinRM) Yapılandırma


Varsayılan olarak, HTTP (TCP/5985) veya HTTPS (TCP/5986) taşıma protokolünün kullanılmasından bağımsız olarak bir PowerShell Uzaktan İletişim oturumundaki trafik şifrelenir. Neyse, tüm trafik AES-256 anahtarı kullanılarak şifrelenir. Ancak, AD ormanınızın dışındaki veya bir çalışma grubu içindeki uzak bir bilgisayara bağlanırsanız (Kerberos ile güven ilişkisi kuramaz), ortadaki adam saldırıları riskiyle karşı karşıya kalırsınız. Microsoft, üçüncü taraf bilgisayarlara bağlandığınızda PSRemoting için her zaman HTTPS aktarımının kullanılmasını önerir.

Bu makalede, bir SSL sertifikası kullanarak PowerShell Remoting'i HTTPS üzerinden nasıl yapılandıracağınızı göstereceğiz. HTTPS üzerinden PSRemoting oturumları, AD alanınızın/ormanınızın dışındaki bilgisayarlara bağlanırken daha yüksek bir oturum güvenliği düzeyi sağlar.

Aşağıdaki adımlar, HTTPS üzerinden PowerShell Remoting kullanarak bağlanmak istediğiniz Windows çalıştıran bir uzak cihazın nasıl yapılandırılacağını açıklamaktadır.

Windows'ta ağ konumunuzun Özel veya Etki Alanı olarak ayarlandığından emin olun:

Get-NetConnectionProfile

Şu komutu kullanarak WinRM ve PSRemoting'i etkinleştirin:

Enable-PSRemoting -Force

Bir etki alanında WinRM'yi GPO kullanarak yapılandırabilirsiniz.

WinRM için HTTPS'yi yapılandırmak için öncelikle bağlanmak istediğiniz bilgisayarda bir SSL sertifikası oluşturmanız gerekir. Sertifika, WinRM trafiğini şifrelemek için kullanılacaktır. PowerShell kullanarak kendinden imzalı bir sertifika oluşturmak daha kolaydır. Bir etki alanı ortamında, Otomatik Kayıt'ı kullanarak WinRM sertifikalarını otomatik olarak verebilirsiniz.

Sertifikanın DNS adı olarak bilgisayar adını ve IP adresini belirtin (ağınızda bir DNS sunucusu yoksa kullanışlıdır). Sertifikanın Konu Alternatif Adı için her iki değeri de alabilir ve PowerShell ile kendinden imzalı bir sertifika oluşturabilirsiniz:

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

Yeni SSL sertifikası, bilgisayardaki kişisel sertifika deposunda görünecektir.

Varsayılan olarak, Windows'ta PowerShell Remoting için farklı bağlantı noktalarında iki dinleyici oluşturulur:

  • Bağlantı Noktası 5985'te HTTP

  • Bağlantı Noktası 5986'da HTTPS

Etkin WSMan dinleyicilerinin bir listesini aşağıda gösterildiği gibi alabilirsiniz:

Get-ChildItem wsman:\localhost\Listener

Varsayılan HTTP ve HTTPS dinleyicilerini kaldırın:

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

Yeni bir HTTPS dinleyicisi oluşturun ve sertifikanızı buna bağlayın:

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

WinRM HTTPS trafiğine izin veren bir Windows Güvenlik Duvarı kuralı oluşturun veya etkin olduğundan emin olun:

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

WinRM hizmetini yeniden başlatın:

Restart-Service WinRM

Bu komutu kullanarak bir WinRM HTTPS dinleyicisinin hangi sertifika parmak izine bağlı olduğunu kontrol edebilirsiniz:

WinRM e winrm/config/listener

Uzak ana bilgisayar yapılandırılır. Şimdi SSL sertifikasını bir CER dosyasına aktarmanız gerekiyor:

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

WinRM sunucu ve istemci yapılandırmalarının şifrelenmemiş bağlantılara izin vermediğini unutmayın (varsayılan olarak):

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

Gerekirse, şifrelenmemiş bağlantıları şu şekilde devre dışı bırakabilirsiniz:

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

'

CER dosyasını yönetici bilgisayara kopyalayın ve aşağıdaki komutu kullanarak içe aktarın (veya sertifikayı GPO kullanan diğer bilgisayarlara dağıtın):

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

Ardından, uzak bir Windows ana bilgisayarına WinRM HTTPS kullanarak bağlanmak için Enter-PSSession ve Invoke-Command cmdlet'lerinde -UseSSL bağımsız değişkenini kullanmalısınız. Aşağıdaki örnekte, IP adresiyle PowerShell konsolundan uzak bir ana bilgisayara bağlanacağız (bu IP adresini TrustedHosts'a eklemediğimize dikkat edin):

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

SkipCNCheck seçeneği olmadan bir IP adresiyle bağlanırken aşağıdaki hata oluşur:

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

İlgili makaleler