В этом руководстве рассказывается о том, как установить бесплатные 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.exe
от имени администратора.
Запустится интерактивный мастер, который поможет вам создать сертификат 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
), откройте Привязка к сайту настройки, и убедитесь, что сайт имеет Имя хоста набор. Дополнительные сведения об этом параметре см. в разделе «Как запустить несколько сайтов в IIS с одним и тем же портом или IP-адресом».
Выберите номер сайта, для которого нужно выпустить сертификат.
Затем нажмите A
чтобы выбрать все привязки сайта и y продолжить.
Нажмите y
, чтобы принять условия пользовательского соглашения.
Укажите адрес электронной почты человека, который будет уведомлен о проблемах с продлением сертификата и других уведомлениях (или введите несколько адресов электронной почты через запятую).
На этом этапе веб-службам Let’s Encrypt необходимо убедиться, что вы являетесь владельцем домена, для которого выпускается сертификат. По умолчанию используется HTTP-проверка (http-01 validation, SelfHosting). Для этого запускается небольшой HTTP Challenge Server на порту TCP/80 (если этот порт занят, то будет использоваться IIS). Входящий HTTP-порт 80 должен быть открыт в брандмауэре. Файл ответа будет записан в папку веб-сервера \.well-known\acme-challenge\<random_filename>
.
Весь процесс регистрации и установки сертификата 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.
Сертификат Let’s Encrypt для IIS устанавливается в папку Веб-хостинг -> Сертификаты раздел хранилища сертификатов компьютера (certlm.msc
).
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/"
Сертификат Let’s Encrypt можно продлить через 60 дней с даты выпуска.
Включение перенаправления с HTTP на HTTPS с помощью IIS URL Rewrite
Как только на вашем сайте IIS будет установлен сертификат TLS, вы сможете прекратить использование небезопасного протокола HTTP и перейти на HTTPS. Все HTTP-запросы к сайту могут быть автоматически перенаправлены на HTTPS-адрес URL с помощью функции Microsoft URL Rewrite Module.
Использование сертификатов 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
, вы можете использовать скрипт как есть.
Import-Module WebAdministration
Get-ChildItem IIS:Sites|ft -AutoSize
В столбце ID указан индекс вашего сайта IIS, вычтите из него единицу. В строке 27 сценария PowerShell введите значение индекса, которое у вас есть, вместо 0:
$NewCertThumbprint = (Get-ChildItem IIS:SSLBindings)[0].Thumbprint
Теперь откройте файл 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
Теперь, сразу после обновления сертификата Let’s Encrypt, сценарий привяжет SSL-сертификат к службам RDS и перезапустит службу RD Gateway:
Restart-Service TSGateway
При перезапуске службы TSGateway все текущие сеансы пользователей RDS будут отключены, поэтому рекомендуется изменить частоту обновления сертификата на один раз в 60 дней.