일요일, 1월 07, 2018

원격 데스크톱 연결시 오류 해결

원격 데스크톱 연결오류 (Remote Desktop connection)
2017 7 3일 월요일
오후 3:07


증상

RD 세션 호스트 서버에서 SSL 연결에 대한 RD 세션 호스트 서버 인증에 사용할 자체 서명된 새 인증서를 생성하지 못했습니다. 관련 상태 코드는 액세스가 거부되었습니다.

The RD Session Host Server has failed to create a new self signed certificate to be used for RD Session Host Server authentication on SSL connections. The relevant status code was Access is denied.


원인

인증서 및 MachineKeys 폴더의 권한 이슈로 발생


 해결방법

기존 인증서 삭제 및 인증서 생성

- 기존 자체서명 인증서 삭제
실행 --> mmc --> 인증서 --> 인증서(로컬)-->개인용--> 인증서





위와 같이, 자체 서명된 인증서가 만료된 경우 이를 삭제 한다.
마찬가지로, 원격 데스크톱의 인증서도 삭제한다.




- PS를 통해 신규 인증서 생성
powershell을 관리자 모드를 연후, 다음의 스크립트를 실행하여, 개인키와 공개키를 모두 생성한다.


$name = new-object -com "X509Enrollment.CX500DistinguishedName.1"
$name.Encode("CN=subanya_laptop", 0)


$key = new-object -com "X509Enrollment.CX509PrivateKey.1"
$key.ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
$key.KeySpec = 1
$key.Length = 1024
$key.SecurityDescriptor = "D:PAI(A;;0xd01f01ff;;;SY)(A;;0xd01f01ff;;;BA)(A;;0x80120089;;;NS)"
$key.MachineContext = 1
$key.Create()


$serverauthoid = new-object -com "X509Enrollment.CObjectId.1"
$serverauthoid.InitializeFromValue("1.3.6.1.5.5.7.3.1")
$ekuoids = new-object -com "X509Enrollment.CObjectIds.1"
$ekuoids.add($serverauthoid)
$ekuext = new-object -com "X509Enrollment.CX509ExtensionEnhancedKeyUsage.1"
$ekuext.InitializeEncode($ekuoids)


$cert = new-object -com "X509Enrollment.CX509CertificateRequestCertificate.1"
$cert.InitializeFromPrivateKey(2, $key, "")
$cert.Subject = $name
$cert.Issuer = $cert.Subject
$cert.NotBefore = get-date
$cert.NotAfter = $cert.NotBefore.AddDays(3000)
$cert.X509Extensions.Add($ekuext)
$cert.Encode()


$enrollment = new-object -com "X509Enrollment.CX509Enrollment.1"
$enrollment.InitializeFromRequest($cert)
$certdata = $enrollment.CreateRequest(0)
$enrollment.InstallResponse(2, $certdata, 0, "")



위 ps 명령어를 실행하면, 개인용 --> 인증서에 자동으로 생성된다.
생성된 자체서명 인증서를 "원격 데스크톱" 으로 복사->붙여넣기 한다.




- 레지스터 수정

원격 데스크톱 인증서의 지문 수정을 위해 다음 키로 이동한다.
컴퓨터\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations

"SelfSignedCertificate" 의 바이너리는 위에서 생성한 인증서의 지문으로 변경한다.








다음으로, MachineKeys 폴더의 권한 확인
해당 폴더는 다음 위치에 있다.
C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys

위 폴더의 기본 권한은 다음과 같다.




위와 다르다면, 동일하게 수정한다.
해당 폴더 내의 다음 파일에 대한 권한 점검한다.


f686aace6942fb7f7ceb231212eef4a4_xxxxx


기본 권한은 다음과 같다.

--> 소유자 : system
network service: 허용-읽기
system: 허용-모든권한
administrators: 허용-읽기




원격데스크톱 서비스 재시작

Remote Desktop Services 와 Remote Desktop Configuration 를 재 시작 한다.




참조

인증서 확인
certutil -v -store my "32 b5 39 8e d3 c9 c6 f1 a3 50 bc d4 b5 14 eb b5 a4 5d 1f c6"
certutil -v -store my "32b5398ed3c9c6f1a350bcd4b514ebb5a45d1fc6"
certutil -v -store my 32b5398ed3c9c6f1a350bcd4b514ebb5a45d1fc6

Generating a certificate (self-signed) using powershell and CertEnroll interfaces