Создание сертификата «Let’s Encrypt» на Windows

Криптографические сертификаты служат цифровым аналогом удостоверения сайта, что позволяет шифровать подключения с использованием протокола TLS и тем самым обеспечивать безопасное соединение между сервером и клиентом.
Существуют как платные, так и бесплатные центры сертификации. Одним из бесплатных центров является Let’s Encrypt, который выдаёт сертификаты сроком на 90 дней с возможностью продления в автоматическом режиме.
Шаг 1: Подготовка
Для создания TLS сертификата на Windows скачайте программу ACME Simple (WACS). Далее следуйте инструкции:

- Распакуйте скачанный архив в папку C:\wacs\ .
- В этой же папке создайте каталог crt.
- В брандмауэре Windows откройте Дополнительные параметры → Правила для входящих подключений → Создать правило → Для порта, в поле Определённые локальные порты впишите через запятую порты 80 и 443 и нажмите Далее. Затем выберите пункт Разрешить подключение, снова нажмите Далее, укажите для каких профилей будет применяться правило (по умолчанию для всех) и после нажатия кнопки Далее сохраните правило под любым именем.
Шаг 2: Создание сертификата
Откройте командную строку (cmd) от имени администратора и запустите утилиту:
Далее поочерёдно выполните следующие команды, вводя в терминале буквы или цифры, соответствующие нужным пунктам. Например, для выполнения команды Create certificate (full options) надо будет ввести m и нажать Enter (на версии 2.2):
- Начните создавать сертификат с ручным указанием параметров, для чего выберите:
- Create new certificate (full options);
- Manual input.

- Укажите ваше доменное имя и два раза нажмите Enter для подтверждения.

- При желании вы можете создать отдельные сертификаты для поддоменов или хостов. В нашем примере выберем Single certificate.

- Затем последовательно выберите:
- [http] Serve verification files from memory;
- RSA key;
- PEM encoded files (Apache, nginx, etc.).

- Укажите папку для сохранения сертификатов C:\wacs\crt .
- Вам будет предложено установить пароль для приватного ключа. Выберите None;

- После этого выберите:
- No (additional) store steps ;
- No (additional) installation steps .

- Укажите адрес электронной почты для уведомлений об ошибках.
- На дополнительные вопросы отвечайте следующим образом:
- на вопрос Open in default application? введите no ;
- на вопрос Do you agree with terms? введите yes .
После этого при удачном создании сертификата вы увидите надпись Authorization result: valid. На вопрос Do you want to specify the user the task will run as? введите no .
Если для указанного доменного имени ранее уже генерировался сертификат, вы увидите соответствующее сообщение в строке Existing renewal с указанием даты окончания действия. Вы можете создать его заново, указав yes в ответ на вопрос Overwrite settings?.
В папке C:\wacs\crt сгенерируются 3 файла:
- имя_домена-crt.pem — сам сертификат;
- имя_домена-key.key — файл ключа;
- имя_домена-chain.pem — цепочка доверия, включает корневой и промежуточный сертификаты Let’s Encrypt.
Теперь вы можете использовать их в TrueConf Server, как показано в нашей статье.
Сертификат Let’s Encrypt вручную, без автоматики, на windows
Как и обещал, вот инструкция как получить сертификат SSL для сайта: бесплатно, без линуксов, если ваша панель управления сайтом не поддерживает его выпуск в автоматическом режиме.
Этот вариант подходит например тем, кто хостится у ру-центра ( nic.ru ) — там специально не вводят автоматику установки сертификата, чтобы продавать задорого то, что давно не нужно.
Увы, большинство инструкций или ведут на платные сервисы, или на линуксовые инструкции для хостингов, чтобы найти вариант «на домашнем компе и без заморочек с автоматикой», пришлось напрячься, так что если кому-то время сэкономлю — будет уже неплохо.
Итак, сперва нам надо скачать последнюю версию клиента win-acme с официального сайта: https://www.win-acme.com/

Распаковываем в удобное место, запускаем wacs.exe:

Выбираем N для создания нового сертификата, и 2 для ручной настройки:

Вводим адрес нашего домена, и тут я рекомендую через запятую ввести его в формате «www.домен».
В следующем пункте выбираем 3 (загрузить файл верификации по FTP):

Далее у нас просит адрес вашего FTP с сайтом. Посмотреть его можно в панели управления сайтом на вашем хостинге, при чём путь должен быть именно до папки, где хранятся сами файлы сайта. Если вы тоже используете nic.ru , то это проще всего сделать путём создания нового пользователя FTP — просто укажите ему доступ к папке конкретного сайта:

В противном случае, вам надо будет сперва подключиться имеющимся пользователем по FTP и найти там папку с файлами сайта, и прописать путь именно до неё. На примере того же ру-центра, это выглядит как «ftp:// ftp.ИМЯ_АККАУНТА.nichost.ru:21/home/ИМЯ_АККАУНТА/ИМЯ_. «. На крайняк — с этим может помочь техподдержка хостинга, только не говорите, что вам для установки сертификата, потому что я однажды столкнулся с полным забиванием на мои запросы после этого (ага, как же иначе — посмел покуситься на потенциальную прибыль барыг).
Далее нам надо отказаться от загрузки вебконфига (просто тыкаем enter), ввести имя пользователя FTP, которого мы создали, выбрать ввод пароля в консоли (2), ввести сам пароль, отказаться от его сохранения (enter):

Далее надо выбрать тип файла, в котором нам отдадут сертификат. Почти наверняка вам понадобится формат PEM, так что выбираем пункт 2 (если вдруг не подойдёт — в техподдержку, или попробуйте другие форматы).
Следующим пунктом идёт место сохранения сертификата. Проще всего — в папке программы создайте папку SSL, и скопирeйте прямо из окна проводника путь (для вставки скопированного текста — нажмите правой кнопкой мыши в окне программы):


Далее соглашаемся ввести пароль от приватного ключа в консоли (2), придумываем и вводим пароль, отказываемся от сохранения (enter), и отказываемся от выполнения дополнительных скриптов (3):

Всё, осталось только дождаться завершения проверки и выпуска сертификата. Если всё правильно сделали — это максимум пара минут, и видим заветное «certificate . created«!

А в созданной папке для сертификатов появилось 4 файла:

Нам отсюда обычно нужны только файлы сертификата (-crt) и ключа (-key).
Дальше — надо загрузить их на хостинг, и тут уже зависит от конкретного хостинга. Я покажу на примере ру-центра.
В панели управления хостингом выбираем «Сайты«, потом ваш сайт, вкладку «Безопасность«, при необходимости включаем «Защищенное HTTPS-соединение» и нажимаем на «Добавить/сменить сертификат«.
Тут нам надо скормить полученный файлы хостеру. Выбираем напротив «сертификат» кнопку «загрузить файл«, грузим файл с crt в названии, аналогично с приватным ключом, вводим под ним пароль, который мы задали ранее, и нажимаем на «Установить«:

Поздравляю, сертификат установлен!

Поверить срок действия можно в разделе «безопасность» конкретного сайта:

Через без копеек 3 месяца надо будет повторить процесс, но win-acme сохранил данные (кроме паролей), и при запуске надо будет выбирать не «N: Create certificate«, а «R: Run renewals«.
Windows server + Apache + SSL от Let’s Encrypt
Причем сделаем мы это бесплатно, используя сертификат от Let’s Encrypt!
Работу будем выполнять на Windows Server 2019. (Так как на Linux инструкций полно!).
Предполагается, что веб страница у Вас уже опубликована на веб сервере, «проброшены» порты 80 и 443 и внешнее доменное имя «привязано» к вашему статическому IP!
К слову, все подготовительные работы, как и другие подробности на данную тему, можно посмотреть здесь >>
Да, если VPN нет возможности «поднять», или есть опасения, что трафик будет перехвачен, тогда действительно, стоит зашифровать подключение между «клиентом» и «сервером» используя протокол https!
И так начинаем!
Cкачаем консольную утилиту «Win-acme».
При помощи нее мы и получим SSL сертификат, что нужен нам для организации «шифрованного соединения», простыми словами https!

После того как утилита «Win-acme» уже будет находится у нас на диске, мы приступим к дальнейшей подготовке.
Создадим себе каталог на диске, где установлен веб сервер Apache (У меня это директория C:\APACHE\Cert)

В этой папке «Cert» мы и будем держать сертификаты для веб сервера Apache.
Теперь запускаем утилиту «Win-acme» (От имени Администратора) для создания этих сертификатов в директории «Cert».
Получаем SSL сертификат:

Придерживаясь инструкций ниже, мы получим все необходимое для организации https на сайте.
Первым пунктом выбираем «Create сertificate (full options)» поставив букву M и кликнув Enter

Затем пишем 2 — «Manual input» — Enter

Укажем имя домена (реального домена, так как будет проверка).
У меня это web.kuharbogdan.com

Далее просто давим «Enter»

На следующем шаге — 2 «[http-01] Serve verification files from memory»

Выбираем RSA key, пункт также 2

Сертификаты у нас в PEM формате, и мы также выбираем соответствующий пункт: PEM encoded files (Apache, nginx, etc.)

На следующем шаге, укажем расположение папки «Cert», куда следует записать сертификаты.


И на этом наша работа почти закончена!
Выбираем пункт 5 — (No additional) store steps, так как нам больше ничего не требуется от утилиты!

И затем пункт 4 (Так как программа предлагает нам настроить «перевыпуск» сертификата и прочие).
Не забываем, что сертификат от Let’s Encrypt действует 3 мес, потом его повторно надо получить (Перевыпустить).

На следующем шаге, также «Отказ» пишем N + Enter

И наконец Q — Выход

Проверка полученных сертификатов:
Откроем наш каталог «Cert»

Супер! Все сертификаты у нас! Нам осталось только их подключить + внести пару правок в «конфиги» веб сервера Apache!
Подключаем сертификат от Let’s Encrypt

И первое что мы сделаем, так это укажем порт для SSL — наш 443 TCP/IP вместо 80.

После чего, раскомментируем модуль LoadModule ssl_module modules/mod_ssl.so

А также раскомментируем конфиг, где будут настройки SSL

На этом мы прощаемся с httpd.conf, сохраняем файл и переходим к редактированию httpd-ssl.conf

Первым делом, закомментируем 443 порт, мы его указали в httpd.conf

Также закомментируем пути к логам (Если вы в «продакшн» выполняете данную настройку, тогда рекомендую создать файлы для записи логов и указать пути к ним!)
Мы вести запись ошибок веб сервера Apache не будем, (Для теста этого достаточно!).
Комментируем #SSLSessionCache «shmcb:$
Установка бесплатного TLS/SSL сертификата Let’s Encrypt в IIS/RDS в Windows Server 2016/2012 R2
17.03.2022
itpro
Windows Server 2012 R2, Windows Server 2016
комментариев 38
В этом обзоре мы расскажем об особенностях установки и привязки бесплатного 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:
- Утилита WindowsACMESimple(WACS) – утилита командной строки для интерактивного выпуска сертификата и привязки его к определенному сайту на вашем веб сервере IIS;
- Модуль PowershellACMESharp – библиотека 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=»
</conditions>
<action type=»Redirect» url=»https://
</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 ->
- Check if input string -> Matches the Pattern
- Pattern -> ^OFF$

Теперь в блоке Action выберите:
- Action Type -> Redirect
- Redirect URL -> https://
/ - 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:

Теперь откройте задание планировщика 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 командой:
При перезапуске службы TSGateway все текущие сессии пользователей разрываются, поэтому желательно изменить периодичность запуска задания обновления сертфиката на 1 раз в 60 дней.
Отметим, что сертификаты Let’s Encrypt в настоящий момент широко используются на сайтах многих крупных компаний и им доверяют все браузеры. Надеюсь, что судьба бесплатного центра сертификации Let’s Encrypt не постигнет участь WoSign и StartCom.
Предыдущая статья Следующая статья