В этой статье мы подробно рассмотрим, как установить и привязать бесплатный TLS/SSL сертификат от Let’s Encrypt на веб-сервере IIS, который работает на операционных системах Windows Server 2019/2016/2012 R2. Мы также затронем вопросы использования Let’s Encrypt для служб удаленных рабочих столов (Remote Desktop Services). В статье будут описаны шаги по установке, настройки сертификатов и автоматизации их обновления. Скриншоты будут сопровождать текст для наглядности процесса.
Приобрести оригинальные ключи активации можно у нас в каталоге:
Windows Server 2019 — от 2640 ₽
Windows Server 2016 — от 2370 ₽
Windows Server 2012 R2 — от 1270 ₽
Let’s Encrypt и ACME клиенты для Windows
TLS/SSL сертификат защищает данные пользователей, передаваемые по сети, предотвращая атаки «человек посередине» (man-in-the-middle), и гарантирует целостность информации. Let’s Encrypt — некоммерческий центр сертификации, который выпускает бесплатные TLS сертификаты X.509 через API для шифрования HTTPS-соединений. Сертификаты выдают только для валидации доменов (domain validation), и их срок действия составляет 90 дней (с ограничением — 50 сертификатов на один домен в неделю). Однако сертификаты можно автоматически обновлять по расписанию.
Для автоматического выпуска сертификатов используется API, называемый Automated Certificate Management Environment (ACME). Существуют три самых популярных клиента для работы с ACME на Windows:
Windows ACME Simple (WACS) — консольная утилита для выпуска сертификата и его привязки к сайту на IIS;
Powershell ACMESharp — библиотека для работы с ACME API через команды Powershell;
Certify — графический интерфейс для управления сертификатами через ACME API.
Клиент WACS для установки TLS сертификата Let’s Encrypt в IIS на Windows Server
Самый простой способ получить сертификат Let’s Encrypt — использовать утилиту Windows ACME Simple (WACS). Эта утилита — это пошаговый мастер, который позволяет выбрать сайт на IIS и автоматически выпустить для него SSL сертификат.
Шаги установки:
1. Предположим, у вас уже есть сайт на IIS под управлением Windows Server 2016. Ваша задача — переключить сайт на HTTPS, установив сертификат Let’s Encrypt.
2. Скачайте последнюю версию WACS с GitHub (например, win-acme.v2.0.10.444.zip).
3. Распакуйте архив в папку на сервере, например: c:\inetpub\letsencrypt.
4. Убедитесь, что на сервере установлен .NET Framework версии 4.7.2 или выше.
5. Откройте командную строку с правами администратора, перейдите в папку c:\inetpub\letsencrypt и запустите wacs.exe
.
Запустится мастер генерации сертификатов. Чтобы быстро создать новый сертификат, выберите N: — Create new certificates (simple for IIS).
Выберите пункт 1. Single binding of an IIS site, если не требуется сертификат с псевдонимами (SAN). Если вам нужен 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.
В хранилище сертификатов компьютера сертификат Let’s Encrypt для IIS вы можете найти в разделе Web Hosting -> Certificates.
Автоматизация обновления сертификатов и настройка редиректа
После установки сертификата, в планировщике заданий Windows появится задание для автоматического продления сертификата через 60 дней. Команда для обновления сертификата вручную выглядит так:
C:\inetpub\letsencrypt\wacs.exe --renew --baseuri "https://acme-v02.api.letsencrypt.org"
Чтобы настроить перенаправление HTTP трафика на HTTPS, установите модуль Microsoft URL Rewrite Module. Далее в файле 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
Для настройки SSL сертификатов Let’s Encrypt в службах Remote Desktop Services (RDS), следуйте аналогичным шагам, что и для IIS. С помощью WACS можно выпустить сертификат и привязать его к RDS Gateway. Для автоматизации процесса привязки сертификата используйте PowerShell скрипт ImportRDGateway.ps1 (Главный недостаток скрипта – приходится вручную указывать отпечаток нового сертификата), или его модифицированную версию ImportRDGateway_Cert_From_IIS.ps1, которая автоматически обновляет сертификат после его перевыпуска.
Для автоматической привязки сертификата скачайте скрипт ImportRDGateway_Cert_From_IIS.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 добавьте новое задание, которое запускает скрипт ImportRDGateway_Cert_From_IIS.ps1 после обновления сертификата.
Чтобы не менять разрешения на выполнение скриптов PowerShell, вы можете вызывать скрипт командой:
Теперь скрипт привязки SSL сертификата к службам RDS будет выполнятся сразу после продления сертификата Let’s Encrypt. При этом автоматически перезапускается служба RD Gateway командой:
Restart-Service TSGateway
При перезапуске службы TSGateway все текущие сессии пользователей разрываются, поэтому желательно изменить периодичность запуска задания обновления сертфиката на 1 раз в 60 дней.
Также вы можете использовать бесплатные сертификаты Let’s Encrypt в Linux для веб сайтов на Nginx или apache. Cертификаты Let’s Encrypt в настоящий момент широко используются на сайтах многих крупных компаний и им доверяют все браузеры. Теперь ваш сайт или служба RDS защищены актуальным сертификатом от Let’s Encrypt.