Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

การกำหนดค่า PowerShell Remoting (WinRM) ผ่าน HTTPS

โดยค่าเริ่มต้น การจราจรในเซสชัน PowerShell Remoting จะถูกเข้ารหัสเสมอ ไม่ว่าจะใช้โปรโตคอลขนส่ง HTTP (TCP/5985) หรือ HTTPS (TCP/5986) ทุกการจราจรจะถูกเข้ารหัสโดยใช้คีย์ AES-256 อย่างไรก็ตาม หากคุณเชื่อมต่อกับคอมพิวเตอร์ระยะไกลนอกป่า AD หรือในกลุ่มงาน (Workgroup) ที่ Kerberos ไม่สามารถสร้างความสัมพันธ์เชื่อมั่นได้ คุณจะเสี่ยงต่อการโจมตีแบบ man-in-the-middle Microsoft แนะนำให้ใช้การขนส่ง HTTPS สำหรับ PSRemoting เสมอเมื่อเชื่อมต่อกับคอมพิวเตอร์ของบุคคลที่สาม

ในบทความนี้ เราจะแสดงวิธี กำหนดค่า PowerShell Remoting ผ่าน HTTPS โดยใช้ใบรับรอง SSL เซสชัน PSRemoting ผ่าน HTTPS ให้ระดับความปลอดภัยเซสชันสูงกว่าเมื่อเชื่อมต่อกับคอมพิวเตอร์นอกโดเมน/ป่า AD ของคุณ

ขั้นตอนด้านล่างอธิบายวิธีกำหนดค่าอุปกรณ์ระยะไกลที่รัน Windows ที่คุณต้องการเชื่อมต่อโดยใช้ PowerShell Remoting ผ่าน HTTPS

ตรวจสอบว่าตำแหน่งเครือข่ายใน Windows ตั้งค่าเป็น Private หรือ Domain:

Get-NetConnectionProfile

เปิดใช้งาน WinRM และ PSRemoting ด้วยคำสั่ง:

Enable-PSRemoting -Force

ในโดเมน คุณสามารถกำหนดค่า WinRM โดยใช้ GPO

เพื่อกำหนดค่า HTTPS สำหรับ WinRM คุณต้องสร้างใบรับรอง SSL บนคอมพิวเตอร์ที่คุณต้องการเชื่อมต่อก่อน ใบรับรองจะถูกใช้เพื่อเข้ารหัสการจราจร WinRM ง่ายกว่าที่จะสร้างใบรับรองเซลฟ์เซ็น (self-signed) โดยใช้ PowerShell ในสภาพแวดล้อมโดเมน คุณสามารถออกใบรับรอง WinRM อัตโนมัติโดยใช้ Auto-Enrollment

ระบุชื่อคอมพิวเตอร์และที่อยู่ IP เป็นชื่อ DNS ของใบรับรอง (สะดวกหากเครือข่ายของคุณไม่มีเซิร์ฟเวอร์ DNS) คุณสามารถรับค่าทั้งสองสำหรับ Subject Alternative Name ของใบรับรองและสร้างใบรับรองเซลฟ์เซ็นด้วย PowerShell:

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

ใบรับรอง SSL ใหม่จะปรากฏในที่จัดเก็บใบรับรองส่วนตัวบนคอมพิวเตอร์

โดยค่าเริ่มต้น Listener สองตัวบนพอร์ตที่แตกต่างกันจะถูกสร้างสำหรับ PowerShell Remoting ใน Windows:

  • HTTP บนพอร์ต 5985
  • HTTPS บนพอร์ต 5986

คุณสามารถรับรายการ WSMan listeners ที่ใช้งานอยู่ได้ดังนี้:

Get-ChildItem wsman:\localhost\Listener

ลบ HTTP และ HTTPS listeners เริ่มต้น:

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

สร้าง HTTPS listener ใหม่และผูกใบรับรองของคุณ:

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

สร้างกฎ Windows Firewall ที่อนุญาตการจราจร WinRM HTTPS หรือตรวจสอบว่ามันใช้งานอยู่:

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 listener ผูกกับ Thumbprint ใบรับรองใดได้โดยใช้คำสั่งนี้:

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

หากจำเป็น คุณสามารถปิดใช้งานการเชื่อมต่อที่ไม่เข้ารหัสได้ดังนี้:

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\

จากนั้น เพื่อเชื่อมต่อกับโฮสต์ Windows ระยะไกลโดยใช้ WinRM HTTPS คุณต้องใช้引数 -UseSSL ในคำสั่ง Enter-PSSession และ Invoke-Command ในตัวอย่างต่อไปนี้ เราจะเชื่อมต่อกับโฮสต์ระยะไกลจากคอนโซล PowerShell โดยที่อยู่ IP (โปรดสังเกตว่าเรายังไม่ได้เพิ่มที่อยู่ IP นี้ใน TrustedHosts):

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

เมื่อเชื่อมต่อโดยที่อยู่ IP โดยไม่มีตัวเลือก SkipCNCheck จะเกิดข้อผิดพลาดดังนี้: The SSL certificate contains a common name (CN) that does not match the hostname