Computer >> 컴퓨터 >  >> 시스템 >> Windows Server

Windows Server IIS 웹 서버·RDS에 무료 Let's Encrypt SSL 인증서 설치하기

이 가이드에서는 Windows Server 2019/2016/2012 R2 환경의 IIS 웹 서버에서 운영 중인 사이트에 무료 TLS/SSL 인증서인 Let's Encrypt를 설치하고 바인딩하는 방법을 단계별로 소개합니다.

목차

  • Let's Encrypt와 Windows용 ACME 클라이언트
  • WACS 클라이언트로 IIS에 Let's Encrypt 인증서 설치하기
  • IIS URL Rewrite를 이용한 HTTP → HTTPS 리디렉션
  • RDS Gateway 및 Web Access에서 Let's Encrypt 인증서 활용하기

Let's Encrypt와 Windows용 ACME 클라이언트

웹사이트에 TLS/SSL 인증서를 적용하면 공용 네트워크를 통해 전송되는 사용자 데이터를 중간자 공격(MITM, Man-in-the-Middle)으로부터 보호하고 데이터 무결성을 확보할 수 있습니다.

비영리 인증 기관인 Let's Encrypt는 API를 통해 HTTPS 암호화용 X.509 TLS 인증서를 무료로 자동 발급해 줍니다. 다만 도메인 검증(DV) 방식의 인증서만 발급되며 유효 기간은 90일이고, 한 도메인당 주간 50개의 발급 제한이 있습니다. 하지만 간단한 스케줄링 설정만으로 웹사이트의 SSL 인증서를 자동 갱신할 수 있으므로 실질적인 부담은 크지 않습니다.

Let's Encrypt의 자동화된 인증서 발급 인터페이스는 ACME(Automated Certificate Management Environment) API라고 불립니다. Windows 시스템에서 널리 사용되는 ACME 클라이언트는 다음 세 가지입니다.

  1. WACS(Windows ACME Simple) – 명령 프롬프트 기반 도구로, 대화형 마법사를 통해 SSL 인증서를 발급하고 IIS 사이트에 바인딩할 수 있습니다.
  2. Powershell ACMESharp 모듈 – ACME API를 통해 Let's Encrypt 서버와 통신할 수 있는 PowerShell cmdlet 라이브러리입니다.
  3. Certify – ACME API를 GUI 환경에서 손쉽게 관리할 수 있는 Windows 그래픽 도구입니다.

WACS 클라이언트로 IIS에 Let's Encrypt 인증서 설치하기

Let's Encrypt에서 SSL 인증서를 받는 가장 쉬운 방법은 콘솔 도구 WACS(Windows ACME Simple)(구 LetsEncrypt-Win-Simple)를 사용하는 것입니다. IIS에서 실행 중인 웹사이트를 선택하면 인증서 발급과 바인딩이 자동으로 진행되는 간단한 마법사 형태입니다.

여기서는 Windows Server 2016에서 구동 중인 IIS 웹사이트를 Let's Encrypt의 무료 SSL 인증서로 HTTPS 모드로 전환하는 과정을 예로 들어 설명합니다.

1단계: WACS 다운로드 및 준비

GitHub(https://github.com/PKISharp/win-acme/releases)에서 최신 버전의 WACS 클라이언트를 다운로드합니다(예시에서는 v2.0.10 버전, 파일명 win-acme.v2.0.10.444.zip).

압축을 푼 뒤 IIS가 설치된 서버의 다음 디렉터리에 배치합니다: c:\inetpub\letsencrypt

참고: Win-Acme를 사용하려면 .NET Framework 4.7.2 이상이 설치되어 있어야 합니다. 미리 설치 여부를 확인하세요.

2단계: 인증서 발급 마법사 실행

관리자 권한으로 명령 프롬프트를 열고 c:\inetpub\letsencrypt 디렉터리로 이동한 후 wacs.exe를 실행합니다. 그러면 Let's Encrypt 인증서 생성 및 IIS 사이트 바인딩 마법사가 시작됩니다. 새 인증서를 빠르게 만들려면 N(Create new certificates — simple for IIS) 옵션을 선택합니다.

3단계: 인증서 유형 선택

다음으로 인증서 유형을 선택합니다. 별칭(SAN, Subject Alternative Name)이 포함된 인증서가 필요 없다면 1. Single binding of an IIS site를 선택하면 됩니다. 와일드카드(Wildcard) 인증서가 필요하면 옵션 3을 선택하세요.

4단계: 사이트 선택 및 이메일 등록

유틸리티가 IIS에서 실행 중인 웹사이트 목록을 표시하므로 인증서를 발급할 사이트를 선택합니다. 이후 인증서 갱신 문제나 기타 중요 알림, 남용 신고 등을 받을 이메일 주소를 입력합니다(여러 개는 쉼표로 구분). 사용 약관에 동의하면 WACS가 Let's Encrypt 서버에 접속하여 웹사이트용 SSL 인증서 생성을 자동으로 시도합니다.

IIS용 Let's Encrypt SSL 인증서의 생성과 설치 과정은 완전히 자동화되어 있습니다.

기본적으로 도메인 검증은 http-01(SelfHosting) 방식으로 수행됩니다. 이를 위해서는 해당 도메인의 DNS 레코드가 웹 서버를 가리켜야 합니다. WACS를 수동 모드(full options)로 실행하면 검증 방식을 직접 선택할 수 있는데, 4 [http-01] Create temporary application in IIS(recommended)를 고르면 IIS에 임시 애플리케이션이 생성되어 Let's Encrypt 서버가 이를 통해 도메인 검증을 수행합니다.

주의: TLS/HTTP 검증 중에는 사이트가 정규 DNS 이름으로 인터넷에서 HTTP(80/TCP) 및 HTTPS(443/TCP) 프로토콜을 통해 접근 가능해야 합니다.

5단계: 결과 확인

WACS는 인증서의 개인 키(*.pem), 인증서 본문 등 여러 파일을 C:\Users\%username%\AppData\Roaming\letsencrypt-win-simple 경로에 저장합니다. 이후 백그라운드에서 생성된 Let's Encrypt SSL 인증서를 설치하고 IIS 사이트에 바인딩합니다. 사이트에 이미 SSL 인증서(예: 자체 서명 인증서)가 설치되어 있다면 새 인증서로 교체됩니다.

IIS 관리자에서 해당 웹사이트의 Site Binding 설정을 열어 Let's Encrypt Authority X3가 발급한 인증서가 적용되었는지 확인합니다.

Windows의 신뢰할 수 있는 루트 인증 기관 목록이 최신 상태라면 이 인증서는 사용자 컴퓨터에서 신뢰되는 인증서로 표시됩니다.

Let's Encrypt IIS 인증서는 컴퓨터 인증서 저장소의 Web Hosting → Certificates 항목에서 찾을 수 있습니다.

6단계: 자동 갱신 설정 확인

WACS는 인증서를 자동 갱신하기 위해 Windows 작업 스케줄러에 win-acme-renew (acme-v02.api.letsencrypt.org) 작업을 생성합니다. 이 작업은 매일 실행되며, 실제 갱신은 60일 후에 수행됩니다. 작업이 실행하는 명령은 다음과 같습니다.

C:\inetpub\letsencrypt\wacs.exe --renew --baseuri "https://acme-v02.api.letsencrypt.org"

수동으로 인증서를 갱신할 때도 동일한 명령을 사용할 수 있습니다.

IIS URL Rewrite를 이용한 HTTP → HTTPS 리디렉션

들어오는 모든 HTTP 트래픽을 HTTPS URL로 리디렉션하려면 먼저 Microsoft URL Rewrite 모듈(https://www.iis.net/downloads/microsoft/url-rewrite)을 설치하고, 사이트 설정에서 'Require SSL' 옵션이 비활성화되어 있는지 확인합니다. 그런 다음 web.config에 다음과 같은 재작성 규칙을 추가합니다.

<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS Redirect" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>

URL Rewrite 확장 기능을 통해 IIS 관리자 GUI에서도 리디렉션을 설정할 수 있습니다. Sites → 사이트 이름 → URL Rewrite로 이동합니다.

Add Rule → Blank rule로 새 규칙을 만들고, 규칙 이름을 지정한 뒤 다음 매개변수 값을 설정합니다.

  • Requested URL: Matches the Pattern
  • Using: Regular Expressions
  • Pattern: (.*)

Conditions 섹션에서 Logical Grouping을 Match All로 변경하고 Add를 클릭한 후 아래 설정을 입력합니다.

  • Condition input: {HTTPS}
  • Check if input string: Matches the Pattern
  • Pattern: ^OFF$

마지막으로 Action 블록에서 다음을 선택합니다.

  • Action Type: Redirect
  • Redirect URL: https://{HTTP_HOST}/{R:1}
  • Redirect type: Permanent (301)

브라우저에서 HTTP 주소로 사이트에 접속해 보면 자동으로 HTTPS URL로 리디렉션되는 것을 확인할 수 있습니다.

RDS Gateway 및 Web Access에서 Let's Encrypt 인증서 활용하기

외부 사용자가 사내 네트워크에 접속할 때 RDS Gateway 또는 RDS Web Access를 사용한다면, 자체 서명 인증서 대신 Let's Encrypt의 신뢰할 수 있는 SSL 인증서를 적용할 수 있습니다. Windows Server의 원격 데스크톱 서비스(RDS)를 안전하게 보호하기 위해 Let's Encrypt 인증서를 올바르게 설치하는 방법을 살펴보겠습니다.

주의: RD Gateway 서버에 RDSH 역할도 함께 설치되어 있다면, 비관리자 사용자가 WACS 파일이 저장된 디렉터리(예: c:\inetpub\letsencrypt)와 Let's Encrypt 인증서·키가 보관된 폴더(C:\ProgramData\win-acme)에 접근하지 못하도록 차단해야 합니다.

1단계: RD Gateway 서버에 인증서 발급

RD Gateway 서버에서 앞서 설명한 대로 wacs.exe를 실행하고 대상 IIS 사이트(보통 Default Web Site)를 선택합니다. Let's Encrypt가 새 인증서를 발급하여 IIS 웹사이트에 바인딩하고, 작업 스케줄러에 자동 갱신 작업이 등록됩니다.

이 인증서를 수동으로 내보내 필요한 RDS 서비스에 SSL 바인딩으로 연결할 수도 있지만, Let's Encrypt 인증서가 60일마다 갱신될 때마다 이 작업을 반복해야 하는 번거로움이 있습니다.

2단계: PowerShell 스크립트로 자동 바인딩

Let's Encrypt 인증서가 갱신된 후 RDS Gateway에 SSL 인증서를 자동으로 바인딩하려면 PowerShell 스크립트를 활용할 수 있습니다.

win-acme 프로젝트에는 RDS(원격 데스크톱 서비스)에 선택한 SSL 인증서를 설치할 수 있는 준비된 스크립트 ImportRDGateway.ps1(https://github.com/PKISharp/win-acme/tree/master/dist/Scripts)이 포함되어 있습니다. 단, 이 스크립트의 단점은 새 인증서의 지문(thumbprint)을 직접 지정해야 한다는 것입니다.

ImportRDGateway.ps1 <certThumbprint>

지정한 IIS 사이트에서 인증서 지문을 자동으로 가져오려면 ImportRDGateway.ps1을 기반으로 수정된 ImportRDGateway_Cert_From_IIS.ps1 스크립트를 사용하세요.

이 스크립트는 수동으로도 실행할 수 있습니다.

powershell -File ImportRDGateway_Cert_From_IIS.ps1

RDS Gateway가 IIS의 'Default Web Site'(인덱스 0)에서 구동 중이라면 스크립트를 수정 없이 그대로 사용할 수 있습니다.

3단계: IIS 사이트 ID 확인

IIS에서 사이트 ID를 확인하려면 PowerShell 콘솔을 열고 다음 명령을 실행합니다.

Import-Module WebAdministration
Get-ChildItem IIS:Sites|ft -AutoSize

ID 열에 표시된 값에서 1을 빼면 인덱스가 됩니다. 이 값을 PowerShell 스크립트 27번째 줄의 0 대신 입력합니다.

$NewCertThumbprint = (Get-ChildItem IIS:SSLBindings)[0].Thumbprint

4단계: 스케줄러 작업에 스크립트 연결

win-acme-renew 스케줄러 작업을 열고 Actions 탭에서 SSL 인증서 갱신 후 ImportRDGateway_Cert_From_IIS.ps1 스크립트를 실행하는 새 작업을 추가합니다.

PowerShell 실행 정책을 변경하지 않으려면 다음 명령으로 스크립트를 실행하면 됩니다.

PowerShell.exe -ExecutionPolicy Bypass -File c:\inetpub\letsencrypt\ImportRDGateway_Cert_From_IIS.ps1

이제 Let's Encrypt 인증서가 갱신되는 즉시 RDS에 SSL 인증서를 바인딩하는 스크립트가 자동으로 실행됩니다. 이때 RD Gateway 서비스는 다음 명령으로 자동 재시작됩니다.

Restart-Service TSGateway

알림: TSGateway 서비스가 재시작되면 현재 진행 중인 모든 사용자 세션이 끊어집니다. 따라서 인증서 갱신 작업의 실행 주기를 60일에 한 번으로 조정하는 것이 좋습니다.