Встановлення безкоштовного сертифіката Let’s Encrypt на Windows Server
У цьому огляді ми розповімо про особливості встановлення та прив’язки безкоштовного 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.exeз правами адміністратора.
Для використання Win-Acme потрібно встановити .NET Framework 4.7.2 або вище.
Запуститься інтерактивний майстер генерації сертифіката Let’s Encrypt та прив’язки його до сайту IIS. Щоб швидко створити новий сертифікат, виберіть N: — Create certificate (default settings).
Утиліта може видати, що веб-сайти не виявлено:
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).
Виберіть сайт, для якого потрібно випустити сертифікат.
Потім натисніть 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).
Ви можете автоматизувати випуск сертифіката за допомогою аргументів утиліти 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»
Продовжити (оновити) сертифікат можна через 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
Отримайте вид:
У колонці ID вказано індекс вашого сайту, відніміть від нього одиницю. Отриманий індекс вашого сайту потрібно вказати замість 0 у 27 рядку скрипта PowerShell:$NewCertThumbprint = (Get-ChildItem IIS:SSLBindings)[0].Thumbprint
Тепер відкрийте завдання планувальника 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 днів.
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів