Computer >> 컴퓨터 >  >> 체계 >> Windows Server

HTTPS를 통한 PowerShell Remoting(WinRM) 구성

기본적으로 PowerShell Remoting 세션의 트래픽은 HTTP(TCP/5985) 또는 HTTPS(TCP/5986) 전송 프로토콜이 사용되는지 여부에 관계없이 암호화됩니다. 어쨌든 모든 트래픽은 AES-256 키를 사용하여 암호화됩니다. 그러나 AD 포리스트 외부 또는 작업 그룹(Kerberos는 트러스트 관계를 설정할 수 없음)에 있는 원격 컴퓨터에 연결하는 경우 메시지 가로채기(man-in-the-middle) 공격의 위험이 있습니다. Microsoft는 타사 컴퓨터에 연결할 때 항상 PSRemoting에 HTTPS 전송을 사용할 것을 권장합니다.

이 문서에서는 HTTPS를 통한 PowerShell Remoting 구성 방법을 보여줍니다. SSL 인증서를 사용합니다. HTTPS를 통한 PSRemoting 세션은 AD 도메인/포리스트 외부의 컴퓨터에 연결할 때 더 높은 세션 보안 수준을 제공합니다.

아래 단계는 PowerShell Remoting over HTTPS를 사용하여 연결하려는 Windows를 실행하는 원격 장치를 구성하는 방법을 설명합니다.

Windows의 네트워크 위치가 개인 또는 도메인으로 설정되어 있는지 확인하십시오.

Get-NetConnectionProfile

다음 명령을 사용하여 WinRM 및 PSRemoting을 활성화합니다.

Enable-PSRemoting -Force

도메인에서 GPO를 사용하여 WinRM을 구성할 수 있습니다.

WinRM용 HTTPS를 구성하려면 먼저 연결할 컴퓨터에서 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 인증서가 컴퓨터의 개인 인증서 저장소에 나타납니다.

HTTPS를 통한 PowerShell Remoting(WinRM) 구성

기본적으로 Windows에서 PowerShell Remoting을 위해 서로 다른 포트에 두 개의 수신기가 생성됩니다.

  • 포트 5985의 HTTP
  • 포트 5986의 HTTPS

아래와 같이 활성 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

HTTPS를 통한 PowerShell Remoting(WinRM) 구성

WinRM HTTPS 트래픽을 허용하는 Windows 방화벽 규칙을 생성하거나 활성 상태인지 확인하십시오.

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

HTTPS를 통한 PowerShell Remoting(WinRM) 구성

필요한 경우 다음과 같이 암호화되지 않은 연결을 비활성화할 수 있습니다.

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\

그런 다음 WinRM HTTPS를 사용하여 원격 Windows 호스트에 연결하려면 -UseSSL을 사용해야 합니다. Enter-PSSession 및 Invoke-Command cmdlet의 인수. 다음 예에서는 IP 주소를 사용하여 PowerShell 콘솔에서 원격 호스트에 연결합니다(이 IP 주소를 TrustedHosts에 추가하지 않았음에 유의).

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

HTTPS를 통한 PowerShell Remoting(WinRM) 구성

SkipCNCheck 없이 IP 주소로 연결할 때 옵션을 선택하면 다음 오류가 발생합니다. The SSL certificate contains a common name (CN) that does not match the hostname .