В этом обзоре мы расскажем об особенностях установки и привязки бесплатного TLS/SSL сертификата от Let’s Encrypt на хосте под управлением Windows. Будут описана процедура выпуска, продления сертификата для веб-сайта IIS, а также установка сертификата Let’s Encrypt для защиты подключений к службам RDS.
Некоммерческий центр сертификации Let’s Encrypt позволяет в автоматическом режиме через API выпускать бесплатные доверенные криптографические сертификаты X.509 для TLS-шифрования (HTTPS). Выдаются только сертификаты для валидации доменов (domain validation), со сроком действия 90 дней с возможность перевыпускать сертификат по расписанию.
API интерфейс, позволяющий автоматически выпускать сертификаты называется Automated Certificate Management Environment (ACME) API. Для Windows систем самой популярной реализации клиента ACME API является утилита Windows ACME Simple (WACS).
Получение и установка сертификат Let’s Encrypt в IIS на Windows
Для автоматизации получения SSL сертификата Let’s Encrypt в Windows можно использовать консольную утилиту Windows ACME Simple (WACS) (ранее проект назывался LetsEncrypt-Win-Simple). WACS представляет собой простой графический мастер, который позволяет выбрать сайт IIS и автоматически выпустить и привязать к нему SSL сертификат Let’s Encrypt.
Итак, у меня есть хост с Windows Server 2022, на котором развернут веб-сервер IIS и простой веб-сайт. Наша задача переключить сайт на HTTPS протокол, установив SSL сертификат от Let’s Encrypt.
Скачайте последнюю версию клиента 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
), откройте меню Site Bindings вашего сайта и проверьте, что для сайта задано имя узла (Host Name). Подробнее об этом параметре в статье Как запустить несколько сайтов в IIS на одном порту и IP?
Выберите номер сайта, для которого нужно выпустить сертификат.
Затем нажмите
A
, чтобы выбрать все привязки сайта и
y
чтобы продолжить.
Примите условия пользовательского соглашения, нажав
y
.
Укажите email, на который будут отправляться уведомления о проблемах с обновлением сертификата сайта и другие о оповещения (можно указать несколько email через запятую).
На этом этапе веб сервисы Let’s encrypt должны проверить, что вы являетесь владельцем домена, для которого выпускается. По умолчанию используется HTTP валидация (http-01 validation, SelfHosting). Для этого на вашем хосте запускается небольшой Http Challenge Server (если этот порт занят, используется IIS), на порт 80 которого выполняется подключение (входящий HTTP 80 порт должен быть открыт в файерволе). В папку веб-сервера будет записан файл ответа
\.well-known\acme-challenge\<random_filename>
.
Процесс генерации и установки SSL сертификата Let’s Encrypt для IIS полностью автоматизирован.
- Закрытый ключ сертификата (*.pem) и сам сертификат (*.pfx) сохраняются в каталог
C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org\Certificates
- Подробные логи всех операций WACS по запросу, получению и установке сертификата в каталоге
C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org\Log
Если валидация выполнена успешно, утилита получит от CA сертификат, установит его в хранилище сертификатов и назначит в качестве SSL сертификата целевого сайта IIS. Если на сайте уже установлен SSL сертификат (например, самоподписанный), он будет заменен новым.
В IIS Manager откройте меню Site Binding для вашего сайта и убедитесь, что для него используется сертификат, выданный R10, Let’s Encrypt Authority.
Сертификат Let’s Encrypt для IIS установлен в раздел Web Hosting -> Certificates хранилища сертификатов компьютера (
certlm.msc
).
wacs.exe --target manual --host 12345.winitpro.ru --store certificatestore --validation selfhosting --siteid "TestWebSite"
Продление (перевыпуск) сертификата Let’s Encrypt в Windows
Так как сертификаты Let’s Encrypt выпускаются всего на 90 дней, их нужно периодически обновлять. При генерации нового сертификата, утилита WACS сразу создает в планировщике задач Windows задание для автоматического продления (а фактически перевыпуска) сертификата.
Откройте консоль Task Scheduler (taskschd.msc). Как вы видите, в нем появилось задание win-acme renew (acme-v02.api.letsencrypt.org), которое запускает раз в день команду проверки срока действия и обновления установленных сертификатов:
wacs.exe --renew --baseuri "https://acme-v02.api.letsencrypt.org/"
Продлить (обновить) сертификат можно спустя 60 дней после его выпуска.
Перенаправление трафика IIS сайта с HTTP на HTTPS адрес
Так как для вашего сайта теперь установлен SSL сертификат, вы можете отказаться от использования незащищенного протокола HTTP и полностью перейти на HTSSP. Все HTTP запросы к сайту можно автоматически перенаправлять на HTTPS адрес с помощью IIS модуля Microsoft URL Rewrite Module.
Подробно это описано в статье Настройка редиректа HTTP на HTTPS в IIS на Windows Server.
Использование сертификата Let’s Encrypt для Remote Desktop Services
Если для подключения внешних пользователей в корпоративную сеть вы используете шлюз Remote Desktop Gateway или RD Web Access, можете установить доверенный сертификат Let’s Encrypt вместо обычного самоподписанного сертификата. Рассмотрим, как корректно установить сертификат Let’s Encrypt для защиты служб Remote Desktop Services.
С помощью wacs.exe на сервере RDGW выпустите Let’s Encrypt сертификат для Default Web Site в IIS как описано выше. Можно вручную привязать это сертификат к нужным служба RDS. Но вам придется выполнять эти действия вручную каждые 60 дней при перевыпуске сертификата Let’s Encrypt.
В проекте ACME есть готовый PowerShell скрипт для автоматического импорта Let’s Encrypt в RD Gateway (…\Scripts\ImportRDGateway.ps1). Недостаток этого скрипта – приходится вручную указывать отпечаток нового сертификата:
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 добавьте новое задание, которое запускает PowerShell скрипт ImportRDGateway_Cert_From_IIS.ps1 после обновления сертификата.
Чтобы не менять разрешения на выполнение скриптов PowerShell, вы можете вызывать скрипт командой:
PowerShell.exe -ExecutionPolicy Bypass -File c:\ps\acme\scripts\ImportRDGateway_Cert_From_IIS.ps1
Теперь скрипт привязки SSL сертификата к службам RDS будет выполнятся сразу после продления сертификата Let’s Encrypt. При этом автоматически перезапускается служба RD Gateway командой:
Restart-Service TSGateway
При перезапуске службы TSGateway все текущие сессии пользователей разрываются, поэтому желательно изменить периодичность запуска задания обновления сертификата на 1 раз в 60 дней.
>>> запустите 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? Так какой веб сервер и платформа?
Добрый вечер!
Подскажите как заставить wacs создать сертификат для Default Web Site?
Он его не видит, на форумах читал, что ему требуется создать реальный сайт, который виден из внешней сети, я добавил новый сайт, из внешней сети по доменному имени попадаю на сайт, по ip адресу попадаю на Default Web Site.
При попытке создания нового сертификата, выбираю вновь добавленный сайт, нажав 2 (1 это Default Web Site, но он в списке не отображается), и на шаге «Create certificate failed, retry? (y/n*) — yes» Выходит следующее:
Plugin IIS generated source dsrrd.dorteh.net with 1 identifiers
Plugin Single created 1 order
First chance error calling into ACME server, retrying with new nonce…
Cached order has status invalid, discarding
[dsrrd.dorteh.net] Authorizing…
[dsrrd.dorteh.net] Authorizing using http-01 validation (SelfHosting)
[dsrrd.dorteh.net] Authorization result: invalid
[dsrrd.dorteh.net] {«type»:»urn:ietf:params:acme:error:unauthorized»,»detail»:»46.**.**.**8: Invalid response from _http://*****.******.net/.well-known/acme-challenge/sLBnyDeRTyK9fkrtRd-VGDF6btLBhKlDkse63odsTiw: \u0022\u003C!DOCTYPE html PUBLIC \\\u0022-//W3C//DTD XHTML 1.0 Strict//EN\\\u0022 \\\u0022http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\u0022\u003E\\n\u003Chtml\u003E\\n\u003Cscript lan\u0022″,»status»:403,»instance»:null}
[dsrrd.dorteh.net] Deactivating pending authorization
Может я ошибаюсь, но как я понял, ему не нравится, что он по ip адресу не попадает на выбранный сайт. Подскажите пожалуйста, куда копать?
У вас, скорее всего, просто не настроен биндинг сайта в диспетчере IIS, погуглите что это.
Спасибо!
В статье опечатка
Есть win2012, есть сертификат *.pfx(и вся цепочка сертификатов) при импорте на веб, сертификат запрашивает пароль. Сертификат *.pfx с пустым паролем не ставиться, сгенерировали *.pfx c паролем 8 символов, большие маленкие 1 спец 1 цифра, при запросе пароля, не пропускает его.
Как поставить сертификат в веб , це за мистика ???
Обычные ставятся без проблем…
Делал встроенной утилитой, проще чем openssl
certutil –MergePFX certfile.cer certfile.pfx
A couple things to keep in mind, the -MergePFX only prompts for the certfile not the key so:
Private key file must have .KEY extension.
Cert and key files must have the same base file name.
Cert and key file must be in the same directory.
https://stackoverflow.com/questions/57295162/convert-cert-to-pfx-or-p12-file-format
Или пробовать openssl c заменой шифрования на PBE-SHA1-3DES
При запуске скрипта получаю
Cert thumbprint was not set successfully
Error: Путь «RDS:\GatewayServer\SSLCertificate\Thumbprint» не существует.
win server 2016
Уточните какой скрипт ипользовали?
ImportRDGateway.ps1 требует указания отпечатка сертификата
ImportRDGateway_Cert_From_IIS.ps1 берет его автоматически из IIS (сертификат должен быть установлен!)
У меня такая же беда. Использовал и местный ImportRDGateway_Cert_From_IIS.ps1 и оригинал и указывал ему отпечаток сертификата, ошибка Error: Путь «RDS:\GatewayServer\SSLCertificate\Thumbprint» не существует.
Как будто RDGW у вас не установлен (не донастроен), или на нем серта нет. Сделайте там сначала самоподписанный (или проверьте что он есть)
На прошлой неделе лично эту инструкцию повторил для WS 2022. все ок, в том числе импорт из IIS через ImportRDGateway_Cert_From_IIS.ps1
Само подписанный, то все работает. RDP и RemoteAPP работают. Просто само подписанный вызывает ненужные предупреждения, а в некоторых случаях машины отказываются подключать RAPP, пока машине добавишь сертификат в доверенные (речь идет с сторонних пк, которые не в домене, но требуется подключение к серверу).
Может проблема, в том что Виндоус русский и пути у него русские для сертификата?
Да, самоподписанные сертификаты придется добавлять в доверенные на клиентах. Это ожидаемо, поэжтому let’s encrypt сертификат лучше.
Возможно связано с русской версией Windows Server. В любом случае если скрипт не работает, вы можете вручную выбрать lets’ ecnrypt сертификат в настройках RDS.
Добрый день!
А как вручную выбрать lets’ ecnrypt сертификат в настройках RDS?
Если выбираешь из C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org\Certificates
требует пароль — а какой — не понятно.
Пароль PFX файла можно посмотреть через wacs.exe:
A
: Manage renewalsD
: Show details for *all* renewalsПароль указан в поле
.pfx password
:А по вашему вопросу, я не понял к какой именно службу RDS вы хотите привязать сертификат.
Спасибо! Главный вопрос был — как посмотреть пароль.
Хотел подключить его к службам RDS посредник ,щлюз, вэбдоступ… в настройках развертывания.