В этом обзоре мы расскажем об особенностях установки и привязки бесплатного TLS/SSL сертификата от Let’s Encrypt для сайта на веб сервере IIS, запущенного на Windows Server 2019/2016/2012 R2.
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
Откройте командную строку с правами администратора, перейдите в каталог 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 смогут провести валидацию.
Утилита 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 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:
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS Redirect" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
Также вы можете настроить перенаправление трафика через 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.
Затем на сервере 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 <certThumbprint>
Для автоматического получения отпечатка сертификата с указанного сайта IIS используйте доработанный скрипт ImportRDGateway_Cert_From_IIS.ps1 (основан на стандартном ImportRDGateway.ps1).
Вы можете запустить это скрипт вручную:
powershell -File ImportRDGateway_Cert_From_IIS.ps1
Если у вас RDS Gateway живет на стандартном IIS сайте «Default Web Site» с индексом 0, можете использовать скрипт без изменений.
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.
>>> запустите letsencrypt.exe
На гитхабе в zip-архиве только исходники, exe-файла нет.
Подскажите, что делать?
Собирать (компилировать) скаченное приложение?
Последнюю версию скомпилированного релиза letsencrypt можно скачать на странице _https://github.com/Lone-Coder/letsencrypt-win-simple/releases
Имеет смысл именно эту ссылку в статье использовать, чтобы не искать в комментариях 🙂
Ты прав )
по этой ссылке нет компилированного файла
Всё заработало без валидации домена. Выбрал сайт и сразу все сгенерировалось и привязалось. Спасибо за мануал.
Спасибо! Статья очень помогла.
Спасибо огромное!
Всё заработало с первого раза)
Здравствуйте! Спасибо за подробное руководство! Всё получилось и привязалось. Вместе с этим возник вопрос, как получить из IIS на 2012R2 файлы, который требуются для вышестоящего шлюза безопасности:
cert.pem — собственно сертификат
chain.pem — цепочка доверия, включает корневой и промежуточный сертификаты Let’s Encrypt
fullchain.pem — полная цепочка, включающая кроме содержимого chain.pem сам сертификат
privkey.pem — закрытый ключ сертификата, данный файл является секретным.
сделать экспорт pfx и потом openssl чтобы получить все что вам надо.
Проблема в том, что он помечен как запрещённый для экспорта.
Данного файла letsencrypt нет по ссылкам тут указанным. где скачать подскажите
О каком файле речь? проект win-acme на github доступен и обновляется…
конкретно такой архив отсутствует. там какой то ACME и exe в архиве отсутствует. направьте в нужное русло.
и скажите пожалуйста как проводить настройку в win 2016, поэтапно. Очень нужна помощь.
инструкция не адаптирована на 2019 год. весь пост неактуален, ввиду отсутствия дистрибутива на который ссылается автор.
Обновил статью под текущие реалии. Новая версия клиента — теперь называется Windows ACME Simple (WACS), изменилось имя исполняемого файла и немного шаги мастера генерации сертфиката.
Пользуйтесь 🙂
нет файлов по пути C:\Users\%username%\AppData\Roaming\letsencrypt-win-simple
как их достать?
Версия ОС? Поиском пробовали поискать?
Нашел в документации на github.
Находится тут C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org
Поставьте уже себе на сайт SSL сертификат, хотя бы Let’s Encrypt…..а то стыдно ITPRO, а о базовой безопасности не заботитесь…. тем более, что Chrome скоро от http сайтов вообще откреститься обещал….
А зачем вот на информационном сайте SSL сертификат? Какой практический смысл? Вы здесь пароли или данные кредиток вводите?
При его установке наоборот можно потерять трафик и позиции. Так что сомнительная польза.
А как создать сертификат для всех под-доменов для домена?
Например:
есть домен: mysite.com
и у меня создаются автоматически под-домены типа: login.mysite.com
Заранее спасибо за любые подсказки!
Let’s encrypt умеет создать wildcard сертфикаты для всех поддоменов. В WACS это вроде делает опция 3.
win-acme.v2.1.4.710.x64.trimmed.zip
win-acme.v2.1.4.710.x86.pluggable.zip
Ни в какой версии не понятно, как сделать Wildcard-сертификат, кто то может помочь?
Wildcard-сертификат делается после выбора соответствующего пункта в меню wacs. Тонкость в том, что валидация для таких сертификатов может быть только через DNS. wacs попросит создать вручную TXT-запись для ключевого домена (т.е. того, чье имя после *.), проверит ее появление, затем попросит удалить, и после этого нужный сертификат будет создан. Обновлять его приходится только вручную как раз из-за этой DNS-валидации. Остальное аналогично описанному в статье.
Какого меню можно прислать путь по буквам с цифрами? пожалуйста
а какой пункт? пункта wacs нету
Как быть, если RDG работает на нестандартном порту, т.к. 443 уже занят. Только руками каждый раз обновлять?
Не пробовал такой сценарий, но мне кажется, что он должен поддерживаться WACS.
Ваш сайт отображается, если набрать команду:
Get-ChildItem IIS:Sites
Просто используйте правильный индекс сайта — а в общем все делайте по статье.
Добрый день, у меня один WAN_IP и за ним десяток клиентских rds session host, перед каждым из которых нужно поставить rds-gateway. Каждый клиент в своем домене AD.
Верно ли я понял-
1) проверка со стороны lets encrypt каждые 90 дней происходит только для wildcard сертификатов?
2) для обычного сертификата проверка LE однократна при запросе на сертификат?
3) порты 3391 и 443 для работы RDS gateway можно менять и назначить каждому клиенту свои.
То есть мне не хотелось бы каждые 90 дней менять порты на роутере и указывать разные LAN_IP для проброса. Планирую каждому клиенту сделать А запись в днс, свой сертификат в rds-gateway средствами LE и свою пару портов для https и udp.
Или может в моем сценарии проще купить нормальный wildcard сертификат за 4500р и просто раз в году его руками заменять на 10 гейтах?
Советую читать в оригинале https://www.win-acme.com/ https://github.com/win-acme/win-acme https://www.win-acme.com/reference/plugins/store/certificatestore Если поправить конфиг win-acme, то можно сохранить сертификат в хранилище Windows в Личное.
Спасибо, замечательная статья
«Главный недостаток скрипта – приходится вручную указывать отпечаток нового сертификата:
ImportRDGateway.ps1 » — не актуально т.к. можно подставлять переменные к скрипту например для нового Thumbprint сертификата достаточно добавить параметр {CertThumbprint}
Подробнее тут:
https://www.win-acme.com/reference/plugins/installation/script
Все работает и вроде бы хорошо, за одним исключение: клиенты на вин7 не цепляются через панель управления, Подключения к удаленным рабочим столам и приложениям RemoteApp. С клиентами win10 все без проблем. Битва с обновленными корневыми сертификатами LE успехов не дала и добавлял через оснастку сертификатов и пользователя и ПК и в реестре менял-ничего. Кто найдет решения на клиентах Win7 отпишите.
Спасибо. Очень полезно. Все зароботало.
Скажите пожалуйста, а как можно просто сгенерировать файлы сертификата чтобы потом вручную скормить их например CRM системе, все способы в интернете заставляют сложить сертификат на веб сервере, но если меня такая схема не устраивает что делать?
Можете сделать самоподписанный сертификат.
А если нужен именно lets encrypt, может быть проще выпустить его сразу на CRM? Так какой веб сервер и платформа?