Встановлення безкоштовного сертифіката Let’s Encrypt на Windows Server

💡 Усі статті, обговорення, новини про DevOps — в одному місці. Приєднуйтесь до DevOps спільноти!

У цьому огляді ми розповімо про особливості встановлення та прив’язки безкоштовного TLS/SSL сертифіката від Let’s Encrypt на хості під керуванням Windows.

Некомерційний центр сертифікації Let’s Encrypt дозволяє автоматично через API випускати безкоштовні довірені криптографічні сертифікати X.509 для TLS-шифрування (HTTPS). Видаються лише сертифікати для валідації доменів (domain validation), з терміном дії 90 днів з можливістю перевипускати сертифікат за розкладом.

API інтерфейс, що дозволяє автоматично випускати сертифікати називається Automated Certificate Management Environment (ACME) API. Для Windows систем найпопулярнішої реалізації клієнта ACME API є утиліта Windows ACME Simple (WACS) .

Отримання та встановлення сертифікат Let’s Encrypt у IIS на Windows

Для автоматизації отримання SSL сертифіката Let’s Encrypt у Windows можна використовувати консольну утиліту Windows ACME Simple ( WACS ) (раніше проект називався LetsEncrypt- Win- Simple) . WACS є простим графічним майстром, який дозволяє вибрати сайт IIS і автоматично випустити і прив’язати до нього SSL сертифікат Let’s Encrypt.

Отже, у мене є хост з Windows Server 2022, на якому розгорнутий веб-сервер IIS і простий веб-сайт.

Завантажте останню версію клієнта WACS з GitHub (github.com/...​KISharp/win-acme/releases) для вашої платформи. У нашому випадку це win-acme.v2.2.9.1701.x64.pluggable.zip . Розпакуйте архів у папку на диску.

Завантажити клієнт WACS (win-acme) c GitHub

Запустіть утиліту wacs.exeз правами адміністратора.

Для використання Win-Acme потрібно встановити .NET Framework 4.7.2 або вище.

Запуститься інтерактивний майстер генерації сертифіката Let’s Encrypt та прив’язки його до сайту IIS. Щоб швидко створити новий сертифікат, виберіть N: — Create certificate (default settings).

wacs.exe утиліта для генерації сертифіката letsencrypt у Windows

Утиліта може видати, що веб-сайти не виявлено:

No websites with host bindings have been configured in IIS. Add one in the IIS Manager or choose the plugin ’Manual input’ instead.
Source plugin IIS was unable to generate options

У цьому випадку запустіть консоль керування IIS (inetmgr), відкрийте меню Site Bindings вашого сайту і перевірте, що для сайту встановлено ім’я вузла (Host Name).

Задати hostname для веб-сайту IIS

Виберіть сайт, для якого потрібно випустити сертифікат.

Потім натисніть A, щоб вибрати всі прив’язки сайту і y продовжити.

Прийміть умови користувальницької угоди, натиснувши y.

Вкажіть email, на який будуть надсилатися повідомлення про проблеми з оновленням сертифіката сайту та інші оповіщення (можна вказати кілька email через кому).

На цьому етапі веб-сервіси Let’s encrypt повинні перевірити, що ви є власником домену, для якого випускається. За замовчуванням використовується HTTP валідація (http-01 validation, SelfHosting). Для цього на вашому хості запускається невеликий Http Challenge Server (якщо порт зайнятий, використовується IIS), на порт 80 якого виконується підключення (вхідний HTTP 80 порт повинен бути відкритий у фаєрволі). У папці веб-сервера буде записано файл відповіді \.well-known\acme-challenge\<random_filename>.

Якщо з тих чи інших причин ви не можете виконати ACME HTTP-01 валідацію, можна використовувати DNS —01 валідацію . Для цього в DNS зоні вашого домену потрібно створити спеціальний запис TXT. Ця опція доступна, якщо вибрати в першому меню клієнта wacs пункт M: Create certificate (full options) . ACME клієнт під час валідації домену перевіряє наявність цього запису в DNS.

Процес генерації та встановлення SSL сертифіката Let’s Encrypt для IIS повністю автоматизовано.

  • Закритий ключ сертифіката (*.pem) та сам сертифікат (*.pfx) зберігаються в каталог C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org\Certificates
  • Детальні логи всіх операцій WACS на запит, отримання та встановлення сертифіката в каталозі C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org\Log

Якщо валідацію виконано успішно, утиліта отримає від CA сертифікат, встановить його в сховище сертифікатів і призначить як SSL сертифікат цільового сайту IIS. Якщо на сайті вже встановлено SSL сертифікат (наприклад, самопідписаний ), він буде замінено на новий.

У IIS Manager відкрийте меню Site Binding для вашого сайту та переконайтеся, що для нього використовується сертифікат, виданий R10, Let’s Encrypt Authority .

Цей сертифікат буде довіреним, якщо ви вчасно оновлювали кореневі сертфікати Windows .

Сертифікат Let’s Encrypt для IIS з’явиться у розділі Web Hosting -> Certificates сховища сертифікатів комп’ютера ( certlm.msc).

Сертифікат let's encrypt у сховищі сертифікатів Windowsv-hranilishe-windows

Ви можете автоматизувати випуск сертифіката за допомогою аргументів утиліти wacs.exe. Наприклад, випустити сертифікат Let’s Encrypt зі стандартними налаштуваннями для сайту можна так:

wacs.exe —target manual —host 12345.site.com.ua —store certificatestore —validation selfhosting —siteid «TestWebSite»

Продовження (перевипуск) сертифіката Let’s Encrypt у Windows

Оскільки сертифікати Let’s Encrypt випускаються лише на 90 днів, їх потрібно періодично оновлювати. При генерації нового сертифіката, утиліта WACS відразу створює у планувальнику завдань Windows завдання автоматичного продовження (а фактично перевипуску) сертифіката.

Відкрийте консоль Task Scheduler (taskschd.msc). Як ви бачите, в ньому з’явилося завдання win -acme renew (acme -v 02.api .letsencrypt .org) , яке запускає щодня команду перевірки терміну дії та оновлення встановлених сертифікатів:

wacs.exe —renew —baseuri «acme-v02.api.letsencrypt.org»

завдання планувальника Windows для оновлення tls сертфіката letsencrypt через win acme renew

Продовжити (оновити) сертифікат можна через 60 днів після його випуску.

Перенаправлення трафіку IIS сайту з HTTP на HTTPS адресу

Оскільки для вашого сайту тепер встановлений SSL сертифікат, ви можете відмовитись від використання незахищеного протоколу HTTP і повністю перейти на HTSSP. Всі HTTP запити до сайту можна автоматично перенаправляти на HTTPS адресу за допомогою IIS модуля Microsoft URL Rewrite Module .

Використання сертифіката Let’s Encrypt для Remote Desktop Services

Якщо для підключення зовнішніх користувачів до корпоративної мережі використовуєте шлюз Remote Desktop Gateway або RD Web Access, можете встановити довірений сертифікат Let’s Encrypt замість звичайного самопідписаного сертифіката. Розглянемо, як правильно встановити сертифікат Let’s Encrypt для захисту служб Remote Desktop Services.

Якщо на Remote Desktop Gateway сервері піднята також роль RDSH , потрібно заборонити користувачам Read доступ до каталогу, в якому у вас зберігається WACS (у моєму прикладі це c:\ps\wacs) і до каталогу з сертифікатами сертифікат Let’s Encrypt (C:ProgramData\win-acme).

За допомогою wacs.exe на сервері RDGW випустіть Let’s Encrypt сертифікат для Default Web Site у IIS як описано вище. Можна вручну прив’язати цей сертифікат до потрібних служб RDS. Але вам доведеться виконувати ці дії вручну кожні 60 днів під час перевипуску сертифіката Let’s Encrypt.

У проекті ACME є готовий PowerShell скрипт для автоматичного імпорту Let’s Encrypt у RD Gateway (...\Scripts\ImportRDGateway.ps1). Недолік цього скрипту — доводиться вручну вказувати відбиток нового сертифіката:

ImportRDGateway.ps1 <certThumbprint>

Для автоматичного отримання відбитка сертифіката із зазначеного сайту IIS використовуйте допрацьований скрипт ImportRDGateway_Cert_From_IIS.ps1 (заснований на стандартному ImportRDGateway.ps1).

Ви можете запустити цей скрипт вручну:

powershell -File ImportRDGateway_Cert_From_IIS.ps1

Якщо у вас RDS Gateway живе на стандартному IIS сайті «Default Web Site» з індексом 0, можете використовувати скрипт без змін.

Щоб отримати ID сайту в IIS, відкрийте консоль PowerShell та виконайте:

Import-Module WebAdministration
Get-ChildItem IIS:Sites

Отримайте вид:

Get ChildItem IIS Sites - отримати індекси сайтів у IIS

У колонці ID вказано індекс вашого сайту, відніміть від нього одиницю. Отриманий індекс вашого сайту потрібно вказати замість 0 у 27 рядку скрипта PowerShell:
$NewCertThumbprint = (Get-ChildItem IIS:SSLBindings)[0].Thumbprint

ImportRDGateway_Cert_From_IIS - powershell скрипт для прив'язки ssl сертфікату з iis до rds

Тепер відкрийте завдання планувальника win-acme-renew (acme-v02.api.letsencrypt.org)та на вкладці Action додайте нове завдання, яке запускає PowerShell скрипт ImportRDGateway_Cert_From_IIS.ps1 після оновлення сертифіката.

Щоб не змінювати дозволи на виконання скриптів PowerShell , ви можете викликати скрипт командою:

PowerShell.exe -ExecutionPolicy Bypass -File c:\ps\acme\scripts\ImportRDGateway_Cert_From_IIS.ps1

Скрипт прив’язки SSL сертифіката до служб RDS буде виконуватися відразу після продовження сертифіката Let’s Encrypt. При цьому автоматично перезапускається служба RD Gateway командою:

Restart-Service TSGateway

При перезапуску служби TSGateway усі поточні сесії користувачів розриваються, тому бажано змінити періодичність запуску завдання оновлення сертифіката на 1 раз на 60 днів.

👍ПодобаєтьсяСподобалось3
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Підписатись на коментарі