원격 데스크톱 연결오류 (Remote Desktop connection)
2017년 7월 3일
월요일
오후 3:07
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.
증상
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 --> 인증서 --> 인증서(로컬)-->개인용--> 인증서
실행 --> mmc --> 인증서 --> 인증서(로컬)-->개인용--> 인증서
위와 같이, 자체 서명된 인증서가 만료된 경우 이를 삭제 한다.
마찬가지로, 원격 데스크톱의 인증서도 삭제한다.
위 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: 허용-읽기
마찬가지로, 원격 데스크톱의 인증서도 삭제한다.
$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