[2026/08 전면 개정 안내]
2019년에 본 글을 작성할 당시에는 윈도우 환경에서 Let’s Encrypt를 다루기 위해 WSL(리눅스 서브시스템)과 우분투, Certbot, 파워쉘 스크립트까지 복잡하게 엮어야만 했습니다. ㅠㅠ
하지만 현재는 윈도우 전용 오픈소스 ACME 클라이언트인 win-acme(wacs)가 매우 좋아져, WSL 설치 없이도 윈도우 네이티브 환경에서 클릭 몇 번(또는 명령어 한 줄)으로 [인증서 발급 → 윈도우 인증서 저장소 등록 → RDP 자동 적용 → 작업 스케줄러 90일 자동 갱신]까지 완전 자동으로 처리할 수 있게 되었습니다!
따라서 글 상단에는 2026년 기준 가장 간편하고 완벽한 최신 방법(Windows 10 / 11 공용)을 새로 정리해 두고, 기존 2019년 작성했던 WSL 방식은 히스토리 및 참고를 위해 글 하단에 아카이브로 남겨둡니다. 편하신 방법을 참고해 주시기 바랍니다. ^^
[2026 최신] win-acme로 RDP Let’s Encrypt 인증서 발급 및 자동 갱신 설정하기
윈도우 10 / 11의 원격 데스크톱(RDP)은 정말 편리하지만, 기본 자체 서명(Self-signed) 인증서 상태로 접속하면 늘 찜찜한 보안 경고창이 나타납니다.

무료 공인 인증서인 Let’s Encrypt를 적용하면 이 경고를 완전히 없애고 안전한 TLS 암호화 통신을 이용할 수 있습니다. win-acme를 사용하면 복잡한 스크립트나 배치파일을 짤 필요도 전혀 없습니다.
<준비물>
- Windows 10 또는 Windows 11 Pro / Enterprise / Education (RDP 호스트 기능을 지원하는 에디션이어야 합니다.)
- 개인 소유 도메인 (예:
rdp.mydomain.net) - 80번 포트(HTTP) 포트포워딩 또는 DNS 플러그인(Cloudflare, Route53 등)
※ 공유기 환경이라면 인증서 유효성 검증(HTTP-01 챌린지)을 위해 80번 포트를 일시적으로 해당 PC로 포트포워딩해 두시면 가장 편리합니다.
1단계: win-acme 다운로드 및 압축 풀기
win-acme 공식 GitHub 릴리즈 페이지에 접속하여 최신 버전의 플러그형(Pluggable) 또는 트리밍(Trimmed) x64 zip 파일을 다운로드합니다.
👉 win-acme 공식 GitHub Releases 바로가기 (win-acme.vX.X.X.x64.pluggable.zip 권장)
다운로드한 파일의 압축을 풀고, 경로가 변경되지 않을 안전한 위치(예: C:\tools\win-acme 또는 C:\Program Files\win-acme)로 폴더를 이동시켜 줍니다.
(※ win-acme가 갱신 작업 스케줄러를 등록할 때 이 실행 파일 경로를 참조하므로 다운로드 폴더보다는 고정된 경로에 두시는 것을 추천합니다.)
2단계: 관리자 권한으로 wacs.exe 실행하기
압축을 푼 폴더 안에 있는 wacs.exe를 마우스 우클릭하여 [관리자 권한으로 실행]합니다.
친절한 텍스트 메뉴 창이 열리면 아래 순서대로 선택해 주시면 됩니다.
- M 입력 (Create certificate (full options) – 상세 옵션 모드로 진입합니다.)
- 2 입력 (Manual input – 도메인을 직접 입력하기 위해 2번을 선택합니다.)
- 발급받을 도메인 입력:
rdp.mydomain.net(본인의 RDP 접속용 서브도메인을 입력하고 엔터를 누릅니다. 친숙한 이름은 그냥 엔터로 통과합니다.) - 검증 방식 선택:
- 공유기에서 80번 포트를 열어두셨다면: [Self-host verification](내장 웹서버 검증)을 선택하시면 가장 간단합니다.
- DNS를 이용하실 분은 [DNS-01 verification]을 선택하신 후 Cloudflare 토큰 등을 입력하셔도 됩니다.
- 인증서 키 유형: RSA key (기본값 엔터)
- 인증서 저장 위치(Store): Windows Certificate Store (윈도우 인증서 저장소에 자동 등록됩니다. 기본값 선택)
- ★ 가장 중요한 설치 단계(Installation Steps):
메뉴 목록에서 [Apply to Remote Desktop](또는rdp관련 플러그인)을 선택합니다.
→ 이 옵션을 선택하면 win-acme가 알아서 윈도우 원격 데스크톱 서비스(TerminalServices)에 발급받은 인증서 지문(Thumbprint)을 자동으로 등록해 줍니다! - 추가 작업이 더 필요한지 물으면 [None / No additional steps]를 선택하여 마칩니다.
약관 동의(Y) 및 알림용 이메일 주소를 입력하고 잠시 기다리면, 인증서가 정상적으로 발급되면서 Windows 작업 스케줄러에 자동 갱신 트리거까지 한 번에 등록됩니다. ^^
(보너스 꿀팁) 명령어 한 줄로 끝내고 싶으시다면?
메뉴를 하나씩 누르는 것조차 번거로우시다면, PowerShell을 관리자 권한으로 실행한 뒤 wacs.exe가 있는 경로에서 아래 명령어를 한 줄로 실행해 주셔도 똑같이 한 방에 끝납니다!
# 도메인과 이메일 주소만 본인 것으로 변경 후 실행해 주세요.
.\wacs.exe --source manual --host rdp.mydomain.net --installation rdp --email-address [email protected] --accepttos3단계: 결과 확인 및 자동 갱신 확인
설정이 완료된 후 다른 PC나 스마트폰의 원격 데스크톱 앱에서 설정한 도메인(rdp.mydomain.net)으로 접속해 보시면, 더 이상 인증서 경고창이 뜨지 않고 상단에 예쁜 자물쇠 아이콘이 걸려 있는 것을 확인하실 수 있습니다.

또한 Windows 작업 스케줄러(taskschd.msc)를 열어보시면 win-acme renew 작업이 자동으로 생성되어 있어, 앞으로는 90일 만료 전 매일 백그라운드에서 체크하여 인증서를 알아서 갱신하고 RDP에 다시 입혀줍니다. 과거처럼 3개월마다 수동으로 스크립트를 돌릴 필요가 완전히 사라졌습니다!
[아카이브] 2019년 작성 원문: WSL + Certbot 수동 연동 방식
※ 아래 내용은 2019년 10월 26일 작성된 초기 가이드입니다. 윈도우 네이티브 툴 대신 WSL 우분투 환경과 쉘/파워쉘 스크립트 연동 원리가 궁금하신 분들을 위해 원문 그대로 보존합니다.
윈도우 10의 원격 데스크톱, 흔히 RDP(Remote Desktop Protocol)라고 부르는 서비스는 원격에서 윈도우를 관리하기에 딱 좋은 도구입니다.
이 RDP에는 기본적으로 RDP 보안이 지원된다고 합니다만, 인증서 없이는 보안이 완벽치 않은 것은 물론, 매번 원격 데스크톱에 접속하려고 하면 뜨는 찜찜한 화면이 늘 우리를 거슬리게 합니다.

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

하지만 무료로 SSL 인증서를 제공해주는 Let’s Encrypt를 활용하면, 적합한 인증서를 사용하여 RDP를 이용하는 것도 꿈만은 아닙니다. 다만 Let’s Encrypt를 RDP에 이용하기 위해서는 몇 가지 제약이 있습니다.
- Let’s Encrypt의 인증서는 발급받고 유효기간이 3개월(90일)입니다. 따라서 90일마다 새로운 인증서로 갱신해 줘야 하는데,
- 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가 시작 메뉴에 나타나는데, 실행을 하게 되면 아래와 같은 에러가 나타날 수도 있습니다.

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

- 왼쪽 하단의 시작 버튼을 Shift 키를 누른 채로 오른쪽 클릭하여, 파워쉘을 관리자 권한으로 실행합니다.
- 다음과 같이 명령어를 입력합니다.
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
# (출처) https://aka.ms/wslinstall

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

(과정 2) 리눅스에 certbot 설치 후 Let’s Encrypt 인증서 발급받기
Certbot 설치를 위하여 다음과 같은 단계를 밟아주세요.
현재 2019년 10월 26일, Ubuntu 18.04 LTS 기준으로 글을 작성하였으나, 설치 방법이 바뀌는 경우 다음 링크를 통해 확인해 주세요.
https://certbot.eff.org/lets-encrypt/ubuntubionic-other
다음과 같은 순서대로 설치해 주세요.
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install software-properties-common
# (위 명령은 실행하여도 이미 설치되어 있다고 할 수 있으나,
# 뒤 명령에 필수적으로 필요하여 일단 추가합니다.)
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update위의 과정이 끝나면 아래와 같이 certbot을 설치합니다.
sudo apt-get install certbot설치를 하였다면 이제 도메인의 인증서 발급을 받아봅시다.
자신이 RDP 사용을 위해 사용하고자 하는 도메인을 정확히 해 주세요.
(예: 여기에서는 rdp.mydomain.net 으로 하겠습니다.)
아래 명령어에서 도메인 이름(rdp.mydomain.net)을 변경하여 명령어를 실행합니다.
certbot certonly --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory -d 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(유효기간 만료 전 갱신) + 윈도우 시스템으로 인증서 가져오는 스크립트 만들기
이제 만들어진 인증서를 윈도우에서 이용하기 위해 쉘 스크립트를 하나 만들려고 합니다. 일단 홈 유저 디렉토리로 이동합니다.
cd ~이동 후, 아래 명령어를 입력하여(nano 편집기를 이용합니다만 개인 취향에 따라 자유롭게 편집기를 이용하세요.) renew.sh 를 만듭니다.
nano renew.sh아래와 같은 내용을 자신의 상황에 맞게 편집하고 Ctrl + X를 누르고, y를 눌러 저장해 주세요.
#!/bin/bash
# certbot 인증서 갱신 스크립트입니다.
certbot renew
# 아래 도메인을 자신의 도메인으로 바꿔주세요.
Domain="rdp.mydomain.net"
# 아래 유저네임은 윈도우 사용자 폴더의 이름입니다.
# 예를 들어, C:\Users\gomgom 이 내 사용자 폴더라면, 아래에 gomgom을 입력해 주세요.
UserName="gomgom"
Directory="/mnt/c/Users/${UserName}"
# 비밀번호는 본인이 원하는 것으로 수정하신 뒤 사용하시면 됩니다.
PassCode="abcd^1234"
# Change working directory.
cd /etc/letsencrypt/live/$Domain
# Make pfx certificate.
openssl rsa -in privkey.pem -text > RDP.key
openssl x509 -inform PEM -in fullchain.pem -out RDP.crt
openssl pkcs12 -export -in RDP.crt -inkey RDP.key -out RDP.pfx -passout pass:$PassCode
rm -rf RDP.key
rm -rf RDP.crt
mv /etc/letsencrypt/live/$Domain/RDP.pfx $Directory
# (참고 출처) https://www.dazzii.com/windows-원격데스크톱-ssl-적용/편집을 하고 아래와 같이 스크립트를 실행하여 잘 실행되는지 확인합니다. 실행이 올바르게 이루어 졌다면 자신의 사용자 폴더에 RDP.pfx 파일이 생성되 있을 것입니다.
sudo bash renew.sh
이 스크립트는 앞으로 매번 이용하게 될 스크립트이므로 삭제하지 말아주세요.
(과정4) 사용자 폴더에 리눅스 스크립트를 실행한 뒤 RDP에 인증서를 적용해주는 PowerShell 스크립트 만들기
이제 마지막 단계입니다. 처음에 RDP에 이번에 만든 SSL 인증서도 적용해주고, 3개월마다 갱신이 필요할 때마다 실행하면 자동으로 인증서로 갈아 치워주는 파워쉘 스크립트를 만듭니다. 이 스크립트는 아까 만든 pfx 파일이 있는 폴더에 있어야 하며, 늘 관리자 권한으로 실행하셔야 합니다.
메모장을 실행한 뒤에 아래 스크립트를 주석을 확인하며 수정하고 붙여넣어 줍니다. 그 다음 Renew.ps1로 파일을 사용자 폴더에 저장해 주세요.
# 여기에는 우분투 시스템을 처음 설정하실 때 만든,
# 관리자 아이디와 비밀번호를 넣어 주세요. (인증서 비밀번호가 아닙니다!)
$UbuntuID = "ubuntu"
$UbuntuPassword = "my@ubuntu@pass"
wsl echo $UbuntuPassword `| sudo -S bash /home/$UbuntuID/renew.sh
# 여기에는 리눅스에서 인증서 비밀번호로 사용하시기로 한 비밀번호 입력해주세요.
$Passcode = "abcd^1234"
# 여기에는 사용하시는 도메인을 넣어주세요.
$Domain = "rdp.mydomain.net"
# 아래 유저네임은 윈도우 사용자 폴더의 이름입니다.
# 예를 들어, C:\Users\gomgom 이 내 사용자 폴더라면, 아래에 gomgom을 입력해 주세요.
$UserName="gomgom"
# Delete certificate of any other
$DeleteCommand = "certutil -delstore MY `"$Domain`""
Invoke-Expression $DeleteCommand
# Install pfx file in computer.
certutil -p $passcode -importPFX C:\Users\$UserName\RDP.pfx
# Get fingerprint of certificate.
$NameValue = "CN=$Domain"
$GotFingerprint = Get-ChildItem -path cert:\LocalMachine\My | Where-Object -Property Subject -eq -Value "$NameValue" | Select -ExpandProperty Thumbprint -first 1
$RDPCommand = "wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash=`"$GotFingerprint`""
Invoke-Expression $RDPCommand
이제 이 파일을 관리자 권한으로 실행하는 간단한 배치파일을 만들어야 합니다. (관리자 권한으로 PowerScript를 실행할 수 있는 다른 방법을 아시는 분은 댓글 남겨주시면 수정하겠습니다.) 메모장을 열고 아래와 같이 입력합니다.
:: 아래 "gomgom"이라고 되어 있는 부분을, 자신의 사용자 이름으로 바꿔주세요.
Powershell.exe -noprofile -executionpolicy bypass -File "C:\Users\yeong\ReNew.ps1"
@echo off
:: (이하 스크립트 참고 출처)
:: http://mwultong.blogspot.com/2006/09/yes-no-choice-dos-windows-batch-file.html
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:LOOP
echo.
set /p YN=RDP 인증서 적용을 위해 시스템 재부팅이 필요합니다. 재부팅 하시겠습니까(Y/N)?
if /i "%YN%" == "y" goto YES
if /i "%YN%" == "n" goto NO
goto LOOP
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:YES
shutdown /r /t 0
goto QUIT
:NO
echo NO
goto QUIT
:QUIT이 파일은 역시 같은 경로에 ReNewStarter.bat(예시입니다. 확장자는 bat여야 합니다.)로 저장합니다. 저장한 배치파일을 오른쪽을 눌러 관리자 권한으로 실행을 하시면 스크립트가 잘 작동하는 것을 확인할 수 있습니다.


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

마치며…
긴 글 과정 따라오시느라 고생 많으셨습니다. 앞으로는 3개월에 한 번 씩 이 스크립트를 관리자 권한으로 실행시켜 주시면 됩니다.
혹시 스크립트를 수정하여 배포하시고 싶으신 분들은 출처만 꼭 밝혀서(^^;) 자유롭게 수정하시고 사용해 주시면 감사하겠습니다.
궁금하신 점도 댓글로 남겨주시면 자주 확인하겠습니다. ^^
< 기타 추가 사항 >
- 혹시 인증서 적용 후 RDP 접속이 불가능해진 경우, 시스템(컴퓨터 오른쪽 – 속성) -> 고급 시스템 설정 -> 원격 -> 원격 데스크톱에서 네트워크 수준 인증을 사용하여 원격 데스크톱을 실행하는 컴퓨터에서만 연결 허용(권장) 체크를 해제해 주세요. 이유는 모르겠으나 체크 해제 후 재부팅 한 뒤, 다시 체크를 하면 연결이 되는 것 같습니다.

답글 남기기