В этом руководстве рассказывается о том, как установить бесплатные Let’s Encrypt TLS/SSL на хост Windows. Мы рассмотрим, как выпустить, привязать и обновить сертификат для веб-сайта IIS, а также как использовать сертификат Let’s Encrypt для защиты соединений со службами RDS.

Let’s Encrypt это открытый центр сертификации (CA), позволяющий автоматически выпускать бесплатные доверенные криптографические сертификаты X.509 для шифрования TLS (HTTPS). Могут быть выпущены только сертификаты Domain Validation (DV) со сроком действия 90 дней с возможностью планового продления.

API автоматизированной среды управления сертификатами (ACME) это открытый API-интерфейс Let’s Encrypt, позволяющий автоматизировать выпуск сертификатов. Сайт WACS (Windows ACME Simple) инструмент, являющийся наиболее популярной реализацией клиента ACME API для среды Windows.

Как сгенерировать и установить сертификат Let’s Encrypt на Windows IIS

Если вы хотите автоматизировать установку TLS-сертификата Let’s Encrypt в Windows, воспользуйтесь командой Windows ACME Simple (WACS) инструмент командной строки. WACS — это простой мастер командной строки, который позволяет выбрать сайт IIS и автоматически выпустить и привязать SSL-сертификат Let’s Encrypt.

Итак, у меня есть хост Windows Server 2022, на котором запущен веб-сервер IIS и простой веб-сайт. Задача состоит в том, чтобы установить сертификат TLS от Let’s Encrypt, чтобы сайт мог использовать протокол HTTPS.

Загрузите последнюю версию клиента WACS для вашей архитектуры с GitHub https://github.com/PKISharp/win-acme/releases. В моем случае это win-acme.v2.2.9.1701.x64.pluggable.zip. Распакуйте архив в локальную папку.

скачать wacs letsencrypt для windows

Запустите программу wacs.exe от имени администратора.

WACS требует установки .NET Framework 4.7.2 или более поздней версии.

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

Создание нового сертификата с помощью инструмента wacs (Windows ACME Simple)

Утилита может сообщить, что не найдено ни одного веб-сайта:

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), откройте Привязка к сайту настройки, и убедитесь, что сайт имеет Имя хоста набор. Дополнительные сведения об этом параметре см. в разделе «Как запустить несколько сайтов в IIS с одним и тем же портом или IP-адресом».

Установка имени хоста в привязке сайта IIS

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

Затем нажмите A чтобы выбрать все привязки сайта и y продолжить.

Нажмите y , чтобы принять условия пользовательского соглашения.

Укажите адрес электронной почты человека, который будет уведомлен о проблемах с продлением сертификата и других уведомлениях (или введите несколько адресов электронной почты через запятую).

давайте зашифруем проверку http-01 на веб-сервере iis

На этом этапе веб-службам Let’s Encrypt необходимо убедиться, что вы являетесь владельцем домена, для которого выпускается сертификат. По умолчанию используется HTTP-проверка (http-01 validation, SelfHosting). Для этого запускается небольшой HTTP Challenge Server на порту TCP/80 (если этот порт занят, то будет использоваться IIS). Входящий HTTP-порт 80 должен быть открыт в брандмауэре. Файл ответа будет записан в папку веб-сервера \.well-known\acme-challenge\<random_filename> .

Если по какой-то причине вы не можете выполнить ACME HTTP-01 валидация, вы можете использовать DNS-01 проверка. Для этого необходимо создать специальную TXT-запись в DNS-зоне вашего домена. Эта опция доступна, если вы выбрали M: Создать сертификат (полные параметры) в первом меню клиента wacs. Клиент ACME проверяет наличие этой DNS-записи при проверке домена.

Весь процесс регистрации и установки сертификата Let’s Encrypt TLS на IIS полностью автоматизирован.

  • Закрытый ключ сертификата (*.pem) и сам сертификат (*.pfx) сохраняются в папке C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org\Certificates\
  • Инструмент WACS записывает подробные журналы всех действий в папку C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org\Log\

Если проверка домена прошла успешно, инструмент получит сертификат из центра сертификации, установит его в хранилище сертификатов и привяжет его в качестве SSL-сертификата для целевого сайта IIS. Если на сайте уже установлен SSL-сертификат (например, самоподписанный), он будет заменен на новый.

Откройте диспетчер IIS и перейдите на страницу вашего сайта Настройки привязки. Убедитесь, что он использует сертификат из R10, Let’s Encrypt Authority.

Привязка сертификата Lets' encrypt к веб-сайту IIS

Этому сертификату можно доверять, если вы поддерживаете хранилище корневых сертификатов Windows Trusted Root Certificates в актуальном состоянии.

Сертификат Let’s Encrypt для IIS устанавливается в папку Веб-хостинг -> Сертификаты раздел хранилища сертификатов компьютера (certlm.msc).

Установка сертификата Let's Encrypt в хранилище сертификатов в Windows

Неуправляемая команда wacs.exe для автоматического выпуска сертификата для веб-сайта IIS может выглядеть следующим образом:wacs.exe --target manual --host sample.woshub.com --store certificatestore --validation selfhosting --siteid "MyTestWebSite"

Обновление сертификатов Let’s Encrypt в Windows

Поскольку срок действия сертификатов Let’s Encrypt истекает через 90 дней, их необходимо регулярно обновлять. Когда генерируется и устанавливается новый сертификат, инструмент WACS создает отдельную задачу автоматического обновления сертификата в планировщике задач Windows.

Как вы можете видеть, она имеет обновление win-acme (acme-v02.api.letsencrypt.org) задача, выполняющая раз в день команду для проверки срока действия сертификата и его обновления:

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

win-acme lets encrypt auto renew scheduler task

Сертификат Let’s Encrypt можно продлить через 60 дней с даты выпуска.

Включение перенаправления с HTTP на HTTPS с помощью IIS URL Rewrite

Как только на вашем сайте IIS будет установлен сертификат TLS, вы сможете прекратить использование небезопасного протокола HTTP и перейти на HTTPS. Все HTTP-запросы к сайту могут быть автоматически перенаправлены на HTTPS-адрес URL с помощью функции Microsoft URL Rewrite Module.

Подробные инструкции можно найти в следующей статье Перенаправление HTTP на HTTPS в Windows IIS.

Использование сертификатов Let’s Encrypt для шлюза RDS и веб-доступа RD

Если вы используете Шлюз удаленных рабочих столов или Веб-доступ RD для подключения внешних пользователей к корпоративной сети можно установить доверенный сертификат Let’s Encrypt вместо стандартного самоподписного сертификата. Давайте рассмотрим, как правильно установить сертификат Let’s Encrypt для защиты подключений Remote Desktop Services.

Выпустите сертификат Let’s Encrypt для веб-сайта по умолчанию в IIS с помощью команды wacs.exe клиента на хосте шлюза RD, как описано выше. Этот сертификат можно вручную экспортировать и привязать к службам RDS с помощью SSL Binding. Однако вам придется выполнять эти действия вручную каждые 60 дней после обновления сертификата Let’s Encrypt.

Проект ACME предоставляет сценарий PowerShell для автоматического импорта сертификата Let’s Encrypt в конфигурацию шлюза RD (…\Scripts\ImportRDGateway.ps1). Основным недостатком этого сценария является то, что вам придется вручную указывать отпечаток пальца нового сертификата:

ImportRDGateway.ps1 <certThumbprint>

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

Вы можете запустить этот сценарий вручную:

powershell -File ImportRDGateway_Cert_From_IIS.ps1

Если у вас запущен RDS Gateway на ‘Default Web Site’ с индексом 0, вы можете использовать скрипт как есть.

Чтобы получить идентификатор сайта в IIS, откройте консоль PowerShell и выполните команду:Import-Module WebAdministration
Get-ChildItem IIS:Sites|ft -AutoSize

Get-ChildItem IIS - получить список сайтов

В столбце ID указан индекс вашего сайта IIS, вычтите из него единицу. В строке 27 сценария PowerShell введите значение индекса, которое у вас есть, вместо 0:

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

изменение индекса сайта шлюза rds в сценарии powershell

Теперь откройте файл win-acme-renew (acme-v02.api.letsencrypt.org) свойства задачи в Планировщик задач. На Действия На вкладке «Действия» добавьте новую задачу для запуска сценария PowerShell (ImportRDGateway_Cert_From_IIS.ps1) после обновления сертификата Let’s Encrypt.

Чтобы не менять параметры политики выполнения PowerShell, можно запустить сценарий с помощью команды:

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

win-acme-renew - обновление задачи сертификации и обновление привязки RDS SSL

Теперь, сразу после обновления сертификата Let’s Encrypt, сценарий привяжет SSL-сертификат к службам RDS и перезапустит службу RD Gateway:

Restart-Service TSGateway

При перезапуске службы TSGateway все текущие сеансы пользователей RDS будут отключены, поэтому рекомендуется изменить частоту обновления сертификата на один раз в 60 дней.