У цьому огляді ми розповімо про особливості установки і прив'язки безкоштовного TLS / SSL сертифікату від Let's Encrypt для сайту на веб сервері IIS, запущеного на Windows Server 2019/2016/2012 R2.
зміст:
- Let's Encrypt і ACME клієнти для Windows
- Клієнт WACS для установки TLS сертифіката Let's Encrypt в IIS на Windows Server
- Перенаправлення трафіку IIS сайту з HTTP на HTTPS адресу
- Використання сертифікату Let's Encrypt для Remote Desktop Services
Let's Encrypt і ACME клієнти для Windows
Наявність TLS / SSL сертифікату у сайту дозволяє захистити дані користувачів, що передаються по мережі від атак людина-посередині (man-in-the-middle) і гарантувати цілісність переданих даних. Некомерційний центр сертифікації Let's Encrypt дозволяє в автоматичному режимі через API випускати безкоштовні криптографічні TLS сертифікати X.509 для шифрування (HTTPS). Видаються тільки сертифікати для валідації доменів (domain validation), з терміном дії 90 днів (є обмеження - 50 сертифікатів для одного домену в тиждень). Але ви можете автоматично перевипускати SSL сертифікат для свого сайту за розкладом.
API інтерфейс, що дозволяє автоматично випускати сертифікати називається Automated Certificate Management Environment (ACME) API. Для Windows систем на даний момент є 3 найпопулярніших реалізації клієнта ACME API:
- утиліта Windows ACME Simple (WACS) - утиліта командного рядка для інтерактивного випуску сертифіката і прив'язки його до певного сайту на вашому веб сервері IIS;
- модуль Powershell ACMESharp - бібліотека Powershell з безліччю команд для взаємодії через ACME API з серверами Let's Encrypt;
- Certify - графічний менеджер SSL сертифікатів для Windows, дозволяє інтерактивно управління сертифікатами через ACME API.
Клієнт WACS для установки TLS сертифіката Let's Encrypt в IIS на Windows Server
Найпростіший спосіб отримати SSL сертифікат від Let's Encrypt - скористатися консольної утилітою Windows ACME Simple (WACS) (Раніше проект називався LetsEncrypt-Win-Simple). Вона являє собою простий майстер, який дозволяє вибрати один із сайтів, запущених на IIS, і автоматично випустити і прив'язати до нього SSL сертифікат.
Отже, припустимо у нас є веб сайт на IIS, розгорнутий під керуванням Windows Server 2016. Наша задача, переключити його в HTTPS режим, встановивши SSL сертифікат від Let's Encrypt.
Скачайте останній реліз клієнта WACS зі сторінки проекту на GitHub https://github.com/PKISharp/win-acme/releases (в моєму випадку це версія v2.0.10 - файл win-acme.v2.0.10.444.zip).
Розпакуйте архів в каталог на сервері з IIS: c: \ inetpub \ letsencrypt
Для використання Win-Acme потрібно встановити .NET Framework 4.7.2 або вище (Як дізнатися яка версія .Net встановлена?).Відкрийте командний рядок з правами адміністратора, перейдіть в каталог c: \ inetpub \ letsencrypt і запустіть wacs.exe.
Запуститься інтерактивний майстер генерації сертифіката Let's Encrypt і прив'язки його до сайту IIS. Щоб швидко створити новий сертифікат виберіть N: - Create new certificates (simple for IIS).
Потім потрібно вибрати тип сертифіката. У нашому прикладі немає необхідності використовувати сертифікат з псевдонімами (декількома SAN - Subject Alternative Name), тому досить вибрати пункт 1. Single binding of an IIS site. Якщо вам потрібен Wildcard-сертифікат, виберіть опцію 3.
Далі утиліта виведе список сайтів, запущених на сервері IIS і запропонує вибрати сайт, для якого потрібно створити і прив'язати новий SSL сертифікат.
Вкажіть ваш email, на який будуть відправлятися повідомлення про проблеми з оновленням сертифіката сайту і інші про повішення (можна вказати кілька email через кому). Залишилося погодиться з умовами використання та Windows ACME Simple підключиться до серверів Let's Encrypt і спробує автоматично згенерувати новий SSL сертифікат для вашого сайту.
Процес генерації і установки SSL сертифікату Let's Encrypt для IIS повністю автоматизований.
За замовчуванням виконується валідація домену в режимі http-01 validation (SelfHosting). Для цього потрібно, щоб в DNS домену був запис, що вказує на ваш веб сервера. При запуску WACS в ручному режимі можна вибрати валідацію типу - 4 [http-01] Create temporary application in IIS (recommended). У цьому випадку на веб-сервері IIS буде створено невеликий додаток, через яке сервера Let's Encrypt зможуть провести валідацію.
Примітка. При виконанні TLS / HTTP перевірки ваш сайт повинен бути доступний зовні по повному DNS імені по протоколах HTTP (80 / TCP) і HTTPS (443 / TCP).Утиліта WACS зберігає закритий ключ сертифіката (* .pem), сам СЕРТФІКАТА і ряд інших файлів в каталог C: \ Users \% username% \ AppData \ Roaming \ letsencrypt-win-simple. Потім вона в фоновому режимі встановить згенерований SSL сертифікат Let's Encrypt і прив'яже його до вашого сайту IIS. Якщо на сайті вже встановлено SSL сертифікат (наприклад, самоподпісанний), він буде замінений новим.
В IIS Manager відкрийте меню Site Binding для вашого сайту і переконайтеся, що для нього використовується сертифікат, виданий Let's Encrypt Authority X3.
Цей СЕРТФІКАТА буде довіреною, якщо ви вчасно оновлювали кореневі СЕРТФІКАТА Windows.У сховищі сертифікатів комп'ютера сертифікат Let's Encrypt для IIS ви можете знайти в розділі Web Hosting -> Certificates.
Windows ACME Simple створює нове правило в планувальнику завдань Windows (win-acme-renew (acme-v02.api.letsencrypt.org)) Для автоматичного продовження сертифіката. Завдання запускається кожен день, продовження сертифіката, через 60 днів. Планувальник запускає команду:
C: \ inetpub \ letsencrypt \ wacs.exe --renew --baseuri "https://acme-v02.api.letsencrypt.org"
Цю ж команду ви можете використовувати для ручного поновлення СЕРТФІКАТА.
Перенаправлення трафіку IIS сайту з HTTP на HTTPS адресу
Щоб перенаправити весь вхідний HTTP трафік на HTTPS сайт, потрібно встановити модуль Microsoft URL Rewrite Module (Https://www.iis.net/downloads/microsoft/url-rewrite), і переконатися, що в налаштуваннях сайту не включена опція обов'язкового використання SSL (Require SSL). Залишилося налаштувати редирект в файлі web.config:
Також ви можете налаштувати перенаправлення трафіку через URL Rewrite через графічний інтерфейс IIS Manager. Виберіть Sites -> yoursitename -> 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.
Використання сертифікату Let's Encrypt для Remote Desktop Services
Якщо ви використовуєте для підключення зовнішніх користувачів до корпоративної мережі шлюз Remote Desktop Gateway / RD Web Access, ви можете використовувати нормальний SSL сертифікат Let's Encrypt замість звичайного самоподпісанного сертифіката. Розглянемо, як коректно встановити сертифікат Let's Encrypt для зажити служб Remote Desktop Services в Windows Server.
Якщо на Remote Desktop Gateway сервері піднята також роль RDSH, потрібно заборонити користувачам Read доступ до каталогу, в якому у вас зберігається WACS (в моєму прикладі це c: \ inetpub \ letsencrypt) і до каталогу з сертифікатами сертифікат Let's Encrypt (C: \ ProgramData \ win-acme).Потім на сервері RDP GW, запускаєте wacs.exe, як описано вище, і ви вибираєте потрібний сайт IIS (зазвичай, Default Web Site). Let's Encrypt видає вам новий сертифікат, який встановлюється для веб-сайту і в планувальнику постає завдання на автоматичні оновлення сертифіката.
Ви можете вручну експортувати даний сертифікат і прив'язати його до потрібних службам RDS через SSL binding. Але вам доведеться виконувати ці дії вручну кожні 60 днів при перевипуску сертифіката Let's Encrypt.
Нам потрібен скрипт, який би відразу після отримання (продовження) сертифіката Let's Encrypt застосовував би його для RD Gateway.
У проекті win-acme є готовий PowerShell скрипт ImportRDGateway.ps1 (https://github.com/PKISharp/win-acme/tree/master/dist/Scripts), який дозволяє встановити обраний SSL сертифікат для служб Remote Desktop. Головний недолік скрипта - доводиться вручну вказувати відбиток нового сертифікату:ImportRDGateway.ps1
Для автоматичного отримання відбитка сертифіката з вказаного сайту IIS використовуйте доопрацьований скрипт ImportRDGateway_Cert_From_IIS.ps1 (Заснований на стандартному ImportRDGateway.ps1).
Інструкція і модифікований PowerShell скрипт надіслані нашим читачем Антоном, за що посилаємо йому промені подяки!Ви можете запустити це скрипт вручну:
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 додайте нове завдання, яке запускає скрипт ImportRDGateway_Cert_From_IIS.ps1 після поновлення сертифіката.
Щоб не міняти дозволу на виконання скриптів PowerShell, ви можете викликати скрипт командою:
PowerShell.exe -ExecutionPolicy Bypass -File c: \ inetpub \ letsencrypt \ ImportRDGateway_Cert_From_IIS.ps1
Тепер скрипт прив'язки SSL сертифікату до служб RDS буде виконуватися відразу після продовження сертифіката Let's Encrypt. При цьому автоматично перезапускається служба RD Gateway командою:
Restart-Service TSGateway
При перезапуску служби TSGateway всі поточні сесії користувачів розриваються, тому бажано змінити періодичність запуску завдання поновлення сертифікатів на 1 раз в 60 днів.
Відзначимо, що сертифікати Let's Encrypt зараз широко використовуються на сайтах багатьох великих компаній і їм довіряють всі браузери. Сподіваюся, що доля безкоштовного центру сертифікації Let's Encrypt чи не спіткає доля WoSign і StartCom.