윈도우 10 + 리눅스 서브시스템(WSL) + Let’s Encrypt 조합으로 원격 데스크톱(RDP) 인증서 적용하기

윈도우 10의 원격 데스크톱, 흔히 RDP(Remote Desktop Protocol)라고 부르는 서비스는 원격에서 윈도우를 관리하기에 딱 좋은 도구입니다.

이 RDP에는 기본적으로 RDP 보안이 지원된다고 합니다만, 인증서 없이는 보안이 완벽치 않은 것은 물론, 매번 원격 데스크톱에 접속하려고 하면 뜨는 찜찜한 화면이 늘 우리를 거슬리게 합니다.

[ 화면은 다를 수 있으나 대략 이런 느낌…ㅠㅠ ]

인증서를 이용한 TLS 보안을 이용하기 위해서는 유효하다고 판단되는 인증서가 있어야 합니다만, 그저 RDP 보안을 위해서 인증서를 발급받는 것은 불필요한 일입니다.

비교적 SSL 인증서 값이 저렴한 PositiveSSL도 무려 1년에 8달러, 만원의 비용을 내야 합니다. ㅠㅠ

하지만 무료로 SSL 인증서를 제공해주는 Let’s Encrypt를 활용하면, 적합한 인증서를 사용하여 RDP를 이용하는 것도 꿈만은 아닙니다. 다만 Let’s Encrypt를 RDP에 이용하기 위해서는 몇 가지 제약이 있습니다.

  1. Let’s Encrypt의 인증서는 발급받고 유효기간이 3개월(90일)입니다. 따라서 90일마다 새로운 인증서로 갱신해 줘야 하는데,
  2. Let’s Encrypt 사용의 자동화를 위해 사용되는 certbot은 윈도우용 버전이 존재하지 않습니다.

따라서 우리는 다소의 불편함을 겪으면서도 RDP에서 인증서를 이용하여 보안을 이용하기 위해서는, 조금 복잡한 과정을 거쳐야 함을 알 수 있습니다.

본 글에서는 윈도우 10과 최근 지원되기 시작한 리눅스 서브시스템(WSL; Windows Subsystem for Linux), 그리고 우분투와 certbot을 활용하여 이 과정을 최대한 자동화 해 보려고 합니다.

이것이 완벽한 해결책은 되지는 못하겠지만, 여러분들의 새로운 생각에 도움이 되기를 바랍니다.

<준비물>

  • 윈도우 10이 설치된 컴퓨터, 물론 RDP 사용을 위해서는 Windows 10 Pro 또는 그에 준하는 등급이 필요합니다.
  • 개인 소유의 도메인(IP만 가지고 있는 분들은 SSL 인증서 발급이 불가합니다.)
  • 도메인이 연결되어 있는 DNS 서비스(예: CloudFlare, Route 53 등등…), DNS 서비스에서 TXT 레코드 추가가 필요합니다.

(과정 1) 리눅스 서브시스템 설치

리눅스 서브시스템은 Microsoft Store에서 설치가 가능합니다.

Microsoft Store에 접속하여 “linux”로 검색을 해보면, WSL을 설치할 수 있는 화면이 나타납니다.

저는 제 작업의 편의를 위해 Ubuntu를 설치하겠습니다. 여러분들도 만약에 저의 스크립트를 사용하시기 위해서는 Ubuntu를 설치하셔야 합니다.

설치를 하면 Ubuntu가 시작 메뉴에 나타나는데, 실행을 하게 되면 아래와 같은 에러가 나타날 수도 있습니다.

만약에 아래와 같은 에러가 발생한다면, 다음과 같이 조치해 주세요.

  1. 왼쪽 하단의 시작 버튼을 Shift 키를 누른 채로 오른쪽 클릭하여, 파워쉘을 관리자 권한으로 실행합니다.
  2. 다음과 같이 명령어를 입력합니다.
[ Shift 키를 누른 채 시작 버튼을 오른쪽 클릭하면, PowerShell을 관리자로 실행할 수 있습니다. ]

재부팅을 하시면 성공적으로 리눅스 서브시스템을 만나보실 수 있습니다.

(과정 2) 리눅스에 certbot 설치 후 Let’s Encrypt 인증서 발급받기

Certbot 설치를 위하여 다음과 같은 단계를 밟아주세요.
현재 2019년 10월 26일, Ubuntu 18.04 LTS 기준으로 글을 작성하였으나, 설치 방법이 바뀌는 경우 다음 링크를 통해 확인해 주세요.
https://certbot.eff.org/lets-encrypt/ubuntubionic-other

다음과 같은 순서대로 설치해 주세요.

위의 과정이 끝나면 아래와 같이 certbot을 설치합니다.

설치를 하였다면 이제 도메인의 인증서 발급을 받아봅시다.
자신이 RDP 사용을 위해 사용하고자 하는 도메인을 정확히 해 주세요.
(예: 여기에서는 rdp.mydomain.net 으로 하겠습니다.)

아래 명령어에서 도메인 이름(rdp.mydomain.net)을 변경하여 명령어를 실행합니다.

몇 가지 질문이 아래처럼 나올 수 있으므로 적절하게 응답하여 주세요.

질문이 끝나면 아래처럼 지정된 도메인의 TXT 레코드에 아래 해시 코드를 추가하라는 알림을 볼 수 있습니다.

DNS에 TXT 레코드 추가를 위하여 각자 도메인 관리를 위해 사용하는 시스템에 들어갑니다. 저는 AWS의 Route 53를 활용중이므로 Route 53을 기준으로 설명하겠습니다. 다른 도메인 관리 시스템도 거의 비슷합니다.

도메인 관리 시스템에 들어가서 새로운 레코드 생성을 추가하여,
도메인을 _acme-challenge.rdp.mydomain.net (자신의 도메인이 들어갑니다.)으로,
타입은 TXT로, 값은 certbot에서 지정해 준 값으로 입력합니다.

나머지는 기본값으로 저장하시고, 5분 정도 기다리시면(기다리실 동안 리눅스 창을 절대 끄지 마세요.) 보통은 DNS TXT값이 설정이 됩니다.

설정이 된 것 같으면(DNS가 정상적으로 적용되었나 확인을 위해서 nslookup을 이용하셔도 됩니다.) certbot에서 엔터를 입력합니다. 정상적으로 되었다면 아래와 같은 화면을 보실 수 있습니다.

정상적으로 완료되었다면 다음 단계로 넘어갑니다.

(과정 3) Renew(유효기간 만료 전 갱신) + 윈도우 시스템으로 인증서 가져오는 스크립트 만들기

이제 만들어진 인증서를 윈도우에서 이용하기 위해 쉘 스크립트를 하나 만들려고 합니다. 일단 홈 유저 디렉토리로 이동합니다.

이동 후, 아래 명령어를 입력하여(nano 편집기를 이용합니다만 개인 취향에 따라 자유롭게 편집기를 이용하세요.) renew.sh 를 만듭니다.

아래와 같은 내용을 자신의 상황에 맞게 편집하고 Ctrl + X를 누르고, y를 눌러 저장해 주세요.

편집을 하고 아래와 같이 스크립트를 실행하여 잘 실행되는지 확인합니다. 실행이 올바르게 이루어 졌다면 자신의 사용자 폴더에 RDP.pfx 파일이 생성되 있을 것입니다.

[ 다음과 같이 RDP 파일이 생성되어 있다면 스크립트가 잘 작동한 것입니다. ]

이 스크립트는 앞으로 매번 이용하게 될 스크립트이므로 삭제하지 말아주세요.

(과정4) 사용자 폴더에 리눅스 스크립트를 실행한 뒤 RDP에 인증서를 적용해주는 PowerShell 스크립트 만들기

이제 마지막 단계입니다. 처음에 RDP에 이번에 만든 SSL 인증서도 적용해주고, 3개월마다 갱신이 필요할 때마다 실행하면 자동으로 인증서로 갈아 치워주는 파워쉘 스크립트를 만듭니다. 이 스크립트는 아까 만든 pfx 파일이 있는 폴더에 있어야 하며, 늘 관리자 권한으로 실행하셔야 합니다.

메모장을 실행한 뒤에 아래 스크립트를 주석을 확인하며 수정하고 붙여넣어 줍니다. 그 다음 Renew.ps1로 파일을 사용자 폴더에 저장해 주세요.

[ 잘 저장하셨다면 이렇게 저장이 되어 있습니다. ]

이제 이 파일을 관리자 권한으로 실행하는 간단한 배치파일을 만들어야 합니다. (관리자 권한으로 PowerScript를 실행할 수 있는 다른 방법을 아시는 분은 댓글 남겨주시면 수정하겠습니다.) 메모장을 열고 아래와 같이 입력합니다.

이 파일은 역시 같은 경로에 ReNewStarter.bat(예시입니다. 확장자는 bat여야 합니다.)로 저장합니다. 저장한 배치파일을 오른쪽을 눌러 관리자 권한으로 실행을 하시면 스크립트가 잘 작동하는 것을 확인할 수 있습니다.

이제 갱신이 필요하실 때마다 스크립트를 실행하시면 됩니다. 여기까지 따라오시느라 고생 많으셨습니다. 실제 RDP로 접속해보면, 다음과 같이 자물쇠가 걸려있는 것을 볼 수 있습니다.

마치며…

긴 글 과정 따라오시느라 고생 많으셨습니다. 앞으로는 3개월에 한 번 씩 이 스크립트를 관리자 권한으로 실행시켜 주시면 됩니다.

혹시 스크립트를 수정하여 배포하시고 싶으신 분들은 출처만 꼭 밝혀서(^^;) 자유롭게 수정하시고 사용해 주시면 감사하겠습니다.
궁금하신 점도 댓글로 남겨주시면 자주 확인하겠습니다. ^^

< 기타 추가 사항 >

  1. 혹시 인증서 적용 후 RDP 접속이 불가능해진 경우, 시스템(컴퓨터 오른쪽 – 속성) -> 고급 시스템 설정 -> 원격 -> 원격 데스크톱에서 네트워크 수준 인증을 사용하여 원격 데스크톱을 실행하는 컴퓨터에서만 연결 허용(권장) 체크를 해제해 주세요. 이유는 모르겠으나 체크 해제 후 재부팅 한 뒤, 다시 체크를 하면 연결이 되는 것 같습니다.

이런 글들은 어떠신가요?

nginx + PHP-fpm에서 502 Bad gateway 에러 해결법 총정리... 필자는 개인적으로 최근 버전의 php-7.0을 사용하고 나서 502 Bad gateway 에러가 나는 빈도수가 거의 없어진 것을 느끼고 있습니다. 우분투에서 php 7.0을 설치하시는 방법이 궁금하신 분들은 여기를 누르셔서 PHP 업그레이드를 시도해 보시기 바랍니다. ...
ddclient로 CloudFlare에 자동 동적 IP(유동 IP) DDNS 설정하기 (우... ▶ 들어가며 (※ Cloudflare가 API v1이 사용 불가능해지고 v4를 사용하고 있어 최신 버전의 ddclient가 필요하게 되었습니다. 3.9.0 버전을 다루고 있으니 참고하시기 바랍니다.)안녕하세요. 곰곰입니다.이번에 gom2.net(곰투넷)에서 go...
워드프레스 Nginx 라즈베리파이로 서버 설치 또는 이전... ▶ 들어가며 본 블로그(곰곰 잡동사니 블로그)는 Tistory에서 테더툴즈로 돌아가던 시절로부터 시작해서, 노트북 내에 민트 리눅스를 사용하여 집에서 서버로 운영되고 있었습니다. 하지만 본 블로그는 인기가 한 푼 어치도 없는 블로그(...)이기 때문에, i3-3217...
Hotspot Shield Elite 1년 이용권 간단 리뷰 1. 들어가며 최근 다양한 외국 미디어나 어플리케이션 스토어의 매체의 우회 접속, 해킹 등으로 인한 각종 IP 접속에 대해 보안을 필요로 하는 경우가 많아졌습니다. 이에 따라서 VPN 서비스 또한 굉장히 큰 발전세를 보이고 있는데요.필자는 평소에도 VPN의 활용에...
PuTTY(또는 KiTTY등 PuTTY기반 SSH)에서 한글 쉘 사용하기... ▶ 들어가며 PuTTY는 최근 SSH(Secure SHell)을 구동할 수 있는 다양한 클라이언트들이 나와있음에도 불구하고, 강한 능력과 가벼운 프로그램으로 인해 오늘날에도 많이 쓰이고 있는 SSH 클라이언트입니다. 다만, 이 클라이언트가 지속적으로 업데이트 되고 ...

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다