Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

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

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

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

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

ตรวจสอบให้แน่ใจว่าตำแหน่งเครือข่ายของคุณใน Windows ถูกตั้งค่าเป็นส่วนตัวหรือโดเมน:

Get-NetConnectionProfile

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

Enable-PSRemoting -Force

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

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

ระบุชื่อคอมพิวเตอร์และที่อยู่ 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 ใหม่จะปรากฏในที่เก็บใบรับรองส่วนบุคคลบนคอมพิวเตอร์

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

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

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

คุณสามารถรับรายชื่อผู้ฟัง WSMan ที่ใช้งานอยู่ดังแสดงด้านล่าง:

Get-ChildItem wsman:\localhost\Listener

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

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

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

สร้างกฎไฟร์วอลล์ Windows ที่อนุญาตการรับส่งข้อมูล 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 ถูกผูกไว้โดยใช้คำสั่งนี้:

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

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

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

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 อาร์กิวเมนต์ใน cmdlet ของ Enter-PSSession และ Invoke-Command ในตัวอย่างต่อไปนี้ เราจะเชื่อมต่อกับโฮสต์ระยะไกลจากคอนโซล PowerShell ด้วยที่อยู่ IP (โปรดทราบว่าเรายังไม่ได้เพิ่มที่อยู่ IP นี้ใน TrustedHosts):

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

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

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