การกำหนดค่า PowerShell Remoting (WinRM) ผ่าน HTTPS
ตามค่าเริ่มต้น การรับส่งข้อมูลในเซสชันระยะไกลของ PowerShell จะถูกเข้ารหัสไม่ว่าจะใช้โปรโตคอลการขนส่ง 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) คุณสามารถรับทั้งสองค่าสำหรับชื่อสำรองหัวเรื่องของใบรับรอง และสร้างใบรับรองที่ลงนามด้วยตนเองด้วย 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 ใน Windows:
HTTP บนพอร์ต 5985
HTTPS บนพอร์ต 5986
คุณสามารถรับรายชื่อผู้ฟัง WSMan ที่ใช้งานอยู่ได้ดังที่แสดงด้านล่าง:
Get-ChildItem wsman:\localhost\Listenerลบฟัง HTTP และ HTTPS เริ่มต้น:
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สร้างกฎไฟร์วอลล์ 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หากจำเป็น คุณสามารถปิดการเชื่อมต่อที่ไม่ได้เข้ารหัสได้ดังนี้:
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 ใน cmdlets 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


