В этом обзоре мы расскажем об особенностях установки и привязки бесплатного TLS/SSL сертификата от Let’s Encrypt на хосте под управлением Windows. Будут описана процедура выпуска, продления сертификата для веб-сайта IIS, а также установка сертификата Let’s Encrypt для защиты подключений к службам RDS.
Содержание:
- Получение и установка сертификат Let’s Encrypt в IIS на Windows
- Продление (перевыпуск) сертификата Let’s Encrypt в Windows
- Перенаправление трафика IIS сайта с HTTP на HTTPS адрес
- Использование сертификата Let’s Encrypt для Remote Desktop Services
Некоммерческий центр сертификации 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>
.
Если по тем или иным причинам вы не можете выполнить ACME HTTP-01 валидацию, можно использовать DNS-01 валидацию. Для этого в DNS зоне вашего домена нужно создать специальную TXT запись. Эта опция доступна, если выбрать в первом меню клиента wacs пункт M: Create certificate (full options). ACME клиент при валидации домена проверяет наличие этой записи в DNS.
Процесс генерации и установки 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. Например, выпустить сертификат Let’s Encrypt со стандартными настройками для сайта можно так:
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.
Если на Remote Desktop Gateway сервере поднята также роль RDSH, нужно запретить пользователям Read доступ к каталогу, в котором у вас хранится WACS (в моем примере это c:\ps\wacs) и к каталогу с сертификатами сертификат Let’s Encrypt (C:\ProgramData\win-acme).
С помощью 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 скрипт присланы нашим читателем Антоном, за что посылаем ему лучи благодарности!
Вы можете запустить это скрипт вручную:
powershell -File ImportRDGateway_Cert_From_IIS.ps1
Если у вас RDS Gateway живет на стандартном IIS сайте «Default Web Site» с индексом 0, можете использовать скрипт без изменений.
Чтобы получить ID сайта в IIS, откройте консоль PowerShell и выполните:
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 дней.
Время на прочтение3 мин
Количество просмотров200K
Пришлось искать способ защитить домены в зонах RU, РФ…
Если вам нужен SSL-сертификат, но вы не являетесь специалистом в веб-технологиях, то эта заметка для вас. Описан простой способ выпуска базового SSL-сертификата Let’s Encrypt в ручном режиме, на локальном компьютере с Windows, с помощью приложения Certbot. Этот способ позволяет получить файлы SSL-сертификата в папку на своём локальном компьютере, после чего можно установить сертификат на свой хостинг.
Потребность в SSL-сертификатах возникла у меня в связи с тем, что срок старых истёк, а создать новые оказалось невозможным из-за возникших ограничений на доменные зоны RU и РФ. Если у вас такая же проблема или вам просто надоело искать веб-сервис для выпуска SSL-сертификатов, то эта заметка вам поможет.
Поскольку я пока не знаю наилучшего пути, то ниже просто опишу ту последовательность действий, которую сам выполнил и которая позволила мне создать SSL-сертификаты для десяти своих доменов (в том числе в зонах RU и РФ), а значит и вам этот способ может помочь.
Создание SSL-сертификата на локальном компьютере
-
Установил на свой локальный компьютер (с операционной системой Windows 11) программу Certbot.
Установочный файл Certbot взял с официального сайта здесь (см. ссылку на загрузку дистрибутива в п.3 на открывшейся по ссылке странице).Запустил скачанный установщик и в диалоге установки изменил адрес установки на:
C:\Certbot
Работа с программой Certbot осуществляется через командную строку или PowerShell (я использовал PowerShell). На время выпуска сертификата, естественно, компьютер должен быть подключен к сети Интернет.
-
Открыл PowerShell (х86) с правами администратора.
Для этого нажал на кнопку «Пуск» и набирая первые буквы названия PowerShell увидел нужный пункт в результатах поиска, затем правым щелчком мыши по названию найденной программы открыл контекстное меню и в нём выбрал пункт «запуск от имени администратора». -
В окне PowerShell с помощью команд
cd
перешёл в каталог Certbot (вводил как показано на скриншоте и нажимал в конце строки клавишу Enter):
-
Вставил из буфера обмена команду для создания сертификата (можете скопировать её из этой строки):
certbot certonly --authenticator manual
И нажал клавишу Enter.
Перед нажатием Enter окно PowerShell выглядело с этой командой так:
-
Система предложила ввести свой email (я ввёл), согласился с условиями (нажимая клавишу Y), в следующий раз программа на этом шаге уже не просила вводить email, а сразу предлагала ввести имена доменов (я вводил сразу по два – второй с www, через запятую):
-
Программа попросила создать файл проверки прав на домен. При этом показано какую строку символов и в файл с каким именем поместить, по какому адресу на веб-сервере этот файл положить:
Поскольку я вводил по два доменных имени (обычное и с www), то после нажатия Enter программа точно так же просила создать ещё один проверочный файл.
С помощью Filezilla Client я создал нужные файлы по требуемому адресу, создав нужные директории. Выделенный текст из окна PowerShell можно копировать просто правым кликом, или привычным сочетанием клавиш Ctrl+C.
-
Нажал клавишу Enter для создания сертификата, но только после того, как проверочные файлы на веб-сервере были созданы.
Система сообщила об успешном создании файлов сертификата, которые я нашёл на своём локальном компьютере, в папке:
C:\Certbot\archive\[имя домена]
Если бы сертификат не был создан, то программа сообщила бы об ошибке.
Вот и всё, сертификаты готовы!
Для установки их на хостинг мне потребовались три файла из четырёх, из данной папки:
cert1.pem – сертификат
chain1.pem – промежуточный сертификат
privkey1.pem – приватный ключ
Эти файлы со своего компьютера не удаляйте, поскольку при следующем выпуске сертификатов (их приходится создавать заново каждые 90 дней) Certbot проверит их наличие и создаст рядом новые, со следующим порядковым номером. Для установки на хостинг нужно будет использовать, конечно, новые.
Ограничения
Через каждые 90 дней нужно перевыпускать сертификат заново.
P.S.:
Я ещё не озадачился тем, как автоматизировать описанный выше процесс (мне интересен перевыпуск сертификата именно на локальном компьютере с Windows). Было бы здорово, если бы знающий человек написал в комментариях как это сделать.
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Получение бесплатного SSL сертификата Let’s Encrypt
Обновлено:
Опубликовано:
Тематические термины: Let’s Encrypt, CentOS, Ubuntu
Процесс в данной статье описан на примере систем Linux CentOS, Ubuntu (Debian) и Windows. Настройка выполняется в несколько шагов.
Условия получения
Проверка права на домен
Используя веб-сервер
С помощью NS
Установка утилиты для запроса сертификата
Certbot (Linux)
LetsEncrypt-Win-Simple (Windows)
Получение сертификата вручную
На Linux
На Windows
Автоматическое продление
Linux
Windows
Запуск certbot в контейнере docker
Получение Wildcard
Полезные команды
Экспорт сертификатов в Windows с закрытым ключом
Let’s Encrypt для Exchange
Возможные ошибки
Дополнительные материалы
Условия получения бесплатного сертификата от Let’s Encrypt
Прежде чем начать, необходимо знать о некоторых нюансах получения сертификата Let’s Encrypt:
- При запросе выполняется проверка домена. Для этого необходимо:
- либо создать TXT-запись в DNS.
- либо поднять веб-сервер, далее в его корне создается каталог .well-known, а в нем файл с произвольным названием. После корневой центр отправляет запрос серверу на загрузку данного файла и, в случае успеха, выдает сертификаты для указанного доменного имени.
- SSL-сертификат выдается на 90 дней, поэтому необходимо по расписанию запускать команду на автоматическое продление ключа. Когда проходит 60 дней после начала использования нового сертификата, центр Let’s Encrypt может выдать новый.
- Если выполнять запрос для домена 3 уровня и выше, он должен пройти DNS проверку на всех уровнях. Например, домен layer3.layer2.com должен отвечать на запросы как для layer3.layer2.com, так и для layer2.com.
Проверка домена
Как было сказано выше, для получения бесплатного сертификата, Let’s Encrypt должен удостовериться, что мы являемся владельцем домена. Свое право на его владение мы можем подтвердить, создав специальную TXT-запись или настроив веб-сервис, который будет отвечать на запросы.
Настройка веб-сервера
Данный способ немного сложнее для Linux (для Windows все настройки делает утилита автоматически), но позволяет без проблем настроить автоматическое продление.
Запрашивать сертификат Let’s Encrypt проще всего с веб-сервера, на котором запущен сайт для домена. Возможен альтернативный вариант с монтирование сетевой папки, но его рассматривать не будем.
Linux NGINX
Пример простого конфигурационного файла для NGINX:
server {
listen 80;
server_name dmosk.ru;
root /usr/share/nginx/html;
}
* где dmosk.ru — домен, для которого работает сайт и для которого мы будем запрашивать сертификат; /usr/share/nginx/html — путь по умолчанию для nginx.
Если сервер уже используется для сайта, в секцию server добавляем:
location ~ /.well-known/acme-challenge {
root /usr/share/nginx/html;
allow all;
}
* данными строчками мы говорим, что для всех запросов после /.well-known необходимо отдавать скрипты из каталога /usr/share/nginx/html; allow all предоставляет доступ всем.
При необходимости выполнять проверку и использовать rewrite/return, добавляем что-то подобное:
…
location ~ /.well-known/acme-challenge {
root /usr/share/nginx/html;
allow all;
}
if ($uri !~ /.well-known/acme-challenge){
return 301 https://$host$request_uri;
}
После проверяем конфигурацию и перезапускаем nginx:
nginx -t && nginx -s reload
Linux Apache
Создаем общий конфигурационный файл, в котором пропишем алиас.
а) для CentOS:
vi /etc/httpd/conf.d/lets.conf
б) для Ubuntu / Debian:
vi /etc/apache2/conf-enabled/lets.conf
Со следующим содержимым:
Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/
* в данном примере, запросы для страниц /.well-known/acme-challenge всех сайтов мы переводим в каталог /var/www/html/.well-known/acme-challenge.
Проверяем корректность конфигурационного файла:
apachectl configtest
И перезапускаем apache:
systemctl restart httpd || systemctl restart apache2
Windows
IIS должен отвечать на http-запрос до доменному имени, для которого мы планируем получить сертификат. Также в его настройках мы должны сделать привязку узла, для которого хотим получить сертификат к конкретному сайту. Для этого в консоли управления IIS раскрываем сайты и выбираем нужный нам (в данном примере, он всего один):
В меню справа кликаем по Привязки:
Изменяем привязку для имеющийся записи и, при необходимости, добавляем еще:
Применяем настройки и закрываем консоль управления IIS.
С помощью записи в DNS
Данный метод проще, описанного выше, но он позволит настроить автоматическое продление сертификата только для некоторых DNS, для которых есть отдельные certbot-плагины. Поэтому данный способ, в большинстве случаев, будет удобен для проведения тестов.
У нас должна быть возможность управления записями в DNS. На данном этапе достаточно просто зайти в панель управления DNS и перейти к этапу получения сертификата (ниже по тексту). Если домен новый и был только-что делегирован на DNS, возможно, придется подождать, пока он не станет доступен для всех серверов DNS в глобальной сети.
Установка утилиты для получения сертификата
Certbot для Linux
1) Rocky Linux:
dnf install epel-release
dnf install certbot
2) на CentOS 8:
dnf —enablerepo=powertools install certbot
3) на CentOS 7:
yum install certbot
4) на Ubuntu 16.04 и выше, а также Debian:
apt update
apt install certbot
5) Универсальный через python-pip:
Пакет certbot является приложением python и для его установки нужно использовать модуль pip. Сам модуль также нужно поставить. В зависимости от дистрибутива Linux наша команда будет отличаться.
а) Для систем на базе DEB:
apt install python3-pip
б) Для систем на базе RPM:
yum install python3-pip
После установки пакета нам доступен модуль pip. Используем его для установки certbot.
Начнем с обновления самого модуля:
python3 -m pip install —upgrade pip
Выполняем установку:
python3 -m pip install certbot
6) Astra Linux:
Для астры не нашел репозитория установки certbot, но есть решение хоть и не красивое, но рабочее.
Загружаем deb-файлы для debian 10:
wget http://ftp.de.debian.org/debian/pool/main/p/python-certbot/certbot_0.31.0-1+deb10u1_all.deb
wget http://ftp.de.debian.org/debian/pool/main/p/python-certbot/python3-certbot_0.31.0-1+deb10u1_all.deb
Пробуем установить python3-certbot:
dpkg -i python3-certbot_0.31.0-1+deb10u1_all.deb
Если мы получим ошибку зависимостей, например:
dpkg: зависимости пакетов не позволяют настроить пакет python3-certbot:
python3-certbot зависит от python3-acme (>= 0.29.0~), однако:
Пакет python3-acme не установлен.
python3-certbot зависит от python3-configargparse (>= 0.10.0), однако:
Пакет python3-configargparse не установлен.
python3-certbot зависит от python3-josepy, однако…
… выполняем команду:
apt install -f
Также мы можем посмотреть список зависимостей командой:
dpkg -I python3-certbot_0.31.0-1+deb10u1_all.deb
Будет выполнена установка зависимостей. После устанавливаем скачанные пакеты:
dpkg -i python3-certbot_0.31.0-1+deb10u1_all.deb
dpkg -i certbot_0.31.0-1+deb10u1_all.deb
7) на CentOS 6 или Ubuntu 14.04 / 12.04:
Создадим каталог, в котором будет храниться утилита и переходим в него:
mkdir /opt/certbot
cd /opt/certbot
Загружаем утилиту и разрешаем ее запуск:
wget https://raw.githubusercontent.com/certbot/certbot/7f0fa18c570942238a7de73ed99945c3710408b4/letsencrypt-auto-source/letsencrypt-auto -O /opt/certbot/letsencrypt-auto
chmod a+x ./letsencrypt-auto
Для удобства, делаем симлинк:
ln -s /opt/certbot/letsencrypt-auto /usr/local/sbin/certbot
Запустим команду:
certbot
При первом запуске certbot он автоматически предложит доустановить необходимые зависимости — соглашаемся.
LetsEncrypt-Win-Simple для Windows
На сайте GitHub скачиваем win-acme pluggable для нужной разрядности операционной системы:
Раcпаковываем скачанный архив в любую папку.
Первое получение сертификата
Linux
1. Если мы подтверждаем право на домен при помощи веб-сервера, выполняем команду с таким синтаксисом:
certbot certonly —webroot —agree-tos —email <почта администратора домена> —webroot-path <путь до каталога с файлами проверки> -d <домен 1> -d <домен 2> -d …
* где:
- certonly — запрос нового сертификата;
- webroot — проверка будет выполняться на основе запроса к корню сайта;
- agree-tos — даем согласие на лицензионное соглашение;
- email — почтовый адрес администратора домена;
- webroot-path — каталог в системе Linux, который является корневым для сайта;
- d — перечисление доменов, для которых запрашиваем сертификат.
а) Пример запроса при использовании веб-сервера NGINX:
certbot certonly —webroot —agree-tos —email postmaster@dmosk.ru —webroot-path /usr/share/nginx/html/ -d dmosk.ru -d www.dmosk.ru
б) Пример запроса при использовании веб-сервера Apache:
certbot certonly —webroot —agree-tos —email postmaster@dmosk.ru —webroot-path /var/www/html/ -d dmosk.ru -d www.dmosk.ru
После успешного выполнения команды, сертификаты будут созданы в каталоге /etc/letsencrypt/archive/dmosk.ru, а также симлинки на них в каталоге /etc/letsencrypt/live/dmosk.ru. При настройке приложений, стоит указывать пути до симлинков, так как при обновлении файлы в первом каталоге будут меняться, во втором — нет. Публичный ключ будет с именем cert.pem, а приватный — privkey.pem.
2. При подтверждении права на домен с TXT-записью:
certbot certonly —manual —agree-tos —email postmaster@dmosk.ru —preferred-challenges=dns -d dmosk.ru -d www.dmosk.ru
* где:
- certonly — запрос нового сертификата;
- manual — проверка домена вручную.
- preferred-challenges — указывает метод проверки домена.
- agree-tos — даем согласие на лицензионное соглашение;
- email — почтовый адрес администратора домена;
- d — перечисление доменов, для которых запрашиваем сертификат.
На запрос подтверждения отвечаем Y — система выдаст что-то на подобие:
Please deploy a DNS TXT record under the name
_acme-challenge.dmosk.ru with the following value:
W2SC9b88y2j2oUjhxVgS7Bphph9g5PqhkBq9KiWkLTm
Once this is deployed,
* Данное сообщение говорит, что мы должны создать TXT-запись _acme-challenge.dmosk.ru со значением W2SC9b88y2j2oUjhxVgS7Bphph9g5PqhkBq9KiWkLTm.
Создаем соответствующую запись в панели управления DNS, и в консоли сервера нажимаем Enter для продолжения. Если, как в данном примере, мы запрашиваем сертификат для нескольких узлов, повторяем действия.
Windows
Открываем командную строку от администратора и переходим в распакованный каталог. Например, если архив распакован на диск C, выполняем:
cd C:\win-acme.v2.1.6.773.x64.pluggable
* где 2.1.6.773.x64 — моя версия утилиты.
Запускаем wacs:
wacs.exe
Если запускаем в Powershel, то так:
.\wacs.exe
Утилита формирует бинарный сертификат для Windows, но если мы хотим получить файлы в формате pem, вводим:
wacs.exe —store pemfiles —pemfilespath C:\Certificates
* где pemfilespath — путь до каталога, в котором должны оказаться файлы сертификата.
Откроется меню с выбором действия — вводим N, чтобы создать новый сертификат:
Обратите внимание, что в зависимости от версии win-acme, некоторые пункты могут отличаться. Внимательно просмотрите варианты.
Выбираем сайт в IIS, который отвечает на запросы нашего домена (в нашем случае, это единственный Default Web Site, то есть 1):
Если для сайта создано несколько привязок, выбираем 3, чтобы создать сертификаты для всех:
Вводим email адрес и подтверждаем корректность данных:
Утилита создаст необходимый каталог для проверки домена, запросит проверку, получит сертификат, добавит привязку к сайту по 443 порту с добавлением полученного сертификата и создаст в планировщике задание на автоматическое продление сертификата.
Автоматическое продление
Утилита certbot позволяет выполнить обновление сертификата в автоматическом режиме. В зависимости от операционной системы, инструменты различаются.
Linux
Открываем на редактирование cron и добавляем следующее:
crontab -e
Если система вернет ошибку crontab: command not found, устанавливаем пакет cron и запускаем сервис.
а) Для deb-систем:
apt install cron
б) Для rpm-систем:
yum install cron
systemctl enable crond —now
Прописываем строку.
0 0 * * 1,4 /usr/bin/certbot renew —noninteractive
* в данном примере проверка и продление сертификата будет выполняться по понедельникам и четвергам (1,4) в 00:00.
Команда certbot renew проверяет для всех наших сертификатов срок окончания, и если осталось менее 30 дней, запрашивает новый, сохраняет его в каталоге /etc/letsencrypt/archive/<домен> и обновляет симлинк.
Стоит иметь ввиду, что многие приложения, использующие сертификат, потребуют перезапуска, чтобы перечитать его. Поэтому хорошей идеей будет не просто обновлять сертификат, но и перезапускать сервис, который использует сертификат. Для этого открываем файл:
vi /etc/letsencrypt/cli.ini
И добавляем строку с командной перезапуска нужного нам приложения, например:
…
deploy-hook = systemctl reload nginx
Windows
Настройка задания на автоматическое продление создается при получении сертификата. Проверить задание можно в планировщике заданий Windows:
Используем docker
Рассмотрим отдельный способ получить сертификат, если у нас на компьютере нет веб-сервера, но работает docker. В этом случае, мы можем запустить контейнер certbot, и выполнить в нем все необходимые процедуры.
Контейнер certbot поддерживает два сценария запуска:
- Запустить свой веб-сервер.
- Использовать имеющийся веб-сервер.
Мы рассмотрим вариант 1.
А вариант 2 описан в другой статье — Docker-compose для создания веб-сервера.
Запускаем контейнер certbot/certbot и выполняем в нем команду certonly:
docker run -it —rm —name certbot -p 80:80 -v «/etc/letsencrypt:/etc/letsencrypt» -v «/var/lib/letsencrypt:/var/lib/letsencrypt» certbot/certbot certonly
На первом шаге нас спросят, в каком режиме включить certbot — выбираем вервый (запуск веб-сервера):
How would you like to authenticate with the ACME CA?
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
1: Runs an HTTP server locally which serves the necessary validation files under
the /.well-known/acme-challenge/ request path. Suitable if there is no HTTP
server already running. HTTP challenge only (wildcards not supported).
(standalone)
2: Saves the necessary validation files to a .well-known/acme-challenge/
directory within the nominated webroot path. A seperate HTTP server must be
running and serving files from the webroot path. HTTP challenge only (wildcards
not supported). (webroot)
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
Select the appropriate number [1-2] then [enter] (press ‘c’ to cancel): 1
При вервом запуске контейнера, необходимо указать адрес электронной почты:
Enter email address (used for urgent renewal and security notices)
(Enter ‘c’ to cancel): master@dmosk.ru
Принято лицензионное соглашение:
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
(Y)es/(N)o: Y
Подписка на рассылки о статусе сертификатов:
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let’s Encrypt project and the non-profit organization that
develops Certbot? We’d like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
(Y)es/(N)o: N
* Y если хотим получать рассылки или N — чтобы контролировать процесс без оповещений на почту.
Вводим через пробел доменные имена, для которых мы должны получить сертификаты:
Please enter the domain name(s) you would like on your certificate (comma and/or
space separated) (Enter ‘c’ to cancel): dmosk.ru www.dmosk.ru
* как и в случае с обысной проверкой, данные имена должны вести на наш сервер, на котором запускается docker-контейнер.
Если операция прошла успешно, мы должны увидеть:
…
Successfully received certificate.
…
Для продления сертификатов с помощью docker вводим команду:
docker run -it —rm —name certbot -p 80:80 -v «/etc/letsencrypt:/etc/letsencrypt» -v «/var/lib/letsencrypt:/var/lib/letsencrypt» certbot/certbot renew
Wildcard
С марта 2018 года появилась возможность получить бесплатный сертификат на все поддомены, например, mail.dmosk.ru, test.dmosk.ru, admin.dmosk.ru (*.dmosk.ru).
Особенности получения Wildcard от Let’s Encrypt:
- Подтвердить право использования доменом можно только с помощью DNS — таким образом, затрудняется процесс автоматического продления. Нужно использовать плагины, которые позволяют автоматически создавать нужную запись на DNS, но они доступны далеко не для всех поставщиков услуг DNS. В противном случае, обновлять Wildcard нужно вручную.
Также, некоторые панели управления хостингом, например ISP Manager с версии 5 могут управлять процессом получения Wildcard от Let’s Encrypt с возможностью автоматического продления (но необходимо, чтобы домен обслуживался на данном хостинге). - Время действия сертификата также ограничено 3 месяцами.
Certbot
Необходимо, чтобы версия утилиты certbot была 0.22.0 и выше. Проверить текущую версию можно командой:
certbot —version
… если версия ниже, обновляем ее командами:
а) для CentOS / Red Hat:
yum update certbot
б) для Ubuntu / Debian:
apt update
apt install —only-upgrade certbot
Процесс получения
Процесс очень похож на процесс получения сертификата с подтверждением домена в DNS.
Вводим команду:
certbot certonly —manual —agree-tos —email master@dmosk.ru —server https://acme-v02.api.letsencrypt.org/directory —preferred-challenges=dns -d dmosk.ru -d *.dmosk.ru
* обратим внимание на 2 детали: 1) мы добавили опцию server, чтобы указать, на каком сервере Let’s Encrypt должна проходить проверка DNS; 2) мы получаем сертификат как для *.dmosk.ru, так и самого dmosk.ru, так как первое не включает второго.
… система попросит создать TXT-запись в DNS, который обслуживает наш домен:
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
Please deploy a DNS TXT record under the name
_acme-challenge.dmosk.ru with the following value:
DN8ovKFJ0leLQV9ofZ81mYKxojwIaed5g6f0bXZCYiI
Before continuing, verify the record is deployed.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
* в данном примере система попросила создать TXT-запись _acme-challenge.dmosk.ru со значением DN8ovKFJ0leLQV9ofZ81mYKxojwIaed5g6f0bXZCYiI.
Заходим в панель управления DNS и создаем нужную запись. Если у нас свой сервер DNS, например, bind, то строка будет такой:
; TXT
_acme-challenge IN TXT DN8ovKFJ0leLQV9ofZ81mYKxojwIaed5g6f0bXZCYiI
Не торопимся нажимать Enter — после настройки DNS нужно немного времени (пару минут), чтобы настройка применилась. Проверить появление записи можно командой с рабочего компьютера:
nslookup -type=txt _acme-challenge.dmosk.ru 8.8.8.8
Как только видим, что настройки применились, нажимаем Enter — если это наш первый запрос Wildcard для данного домена, то система нас попросит создать еще одну запись — повторяем процедуру, создав в DNS вторую запись TXT.
Если все сделали правильно, то увидим:
IMPORTANT NOTES:
— Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/dmosk.ru/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/dmosk.ru/privkey.pem
Your cert will expire on 2019-09-05. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
«certbot renew»
— If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
… сертификат получен.
Полезные команды
Рассмотрим некоторые полезные команды утилиты certbot для работы с сертификатами Let’s Encrypt.
1. Показать группы сертификатов:
certbot certificates
2. Удалить сертификат:
certbot delete -d dmosk.ru
После получения сертификата мы не сможем экспортировать его с закрытым ключом. Мы можем изменить поведение, открыв файл settings.json в распакованном каталоге win-acme. Находим параметр PrivateKeyExportable и задаем ему значение:
«PrivateKeyExportable»: true,
После обновляем сертификат:
.\wacs.exe —renew —force
Или без обновления сертификата мы можем найти файл .pfx в каталоге: %programdata%\win-acme\$baseuri$\certificates.
Пароль для pfx можно найти в интерактивном меню wacs:
Manage Renewals > Show details
Сертификат Let’s Encrypt для почтового сервера MS Exchange
В комплекте установленного нами LetsEncrypt-Win-Simple для Windows идет скрипт ImportExchange.v2.ps1. Он нужен для импорта сертификата в конфигурацию почтового сервера MS Exchange.
Для начала создадим каталог, куда будет выгружен сертификат. В моем примере я воспользуюсь путем C:\SSL.
Допустим, что адрес подключения к серверу будет exchange.dmosk.ru. Тогда получить сертификат и импортировать его в Exchange можно командой:
wacs.exe —source manual —host exchange.dmosk.ru,autodiscover.dmosk.ru —store centralssl,certificatestore —certificatestore My —acl-fullcontrol «network service,administrators» —centralsslstore «C:\SSL» —installation iis,script —installationsiteid 1 —script «./Scripts/ImportExchange.v2.ps1» —scriptparameters «‘{CertThumbprint}’ ‘IIS,SMTP,IMAP’ 1 ‘{CacheFile}’ ‘{CachePassword}’ ‘{CertFriendlyName}'»
* данная команда запросит сертификат для узлов exchange.dmosk.ru и autodiscover.dmosk.ru, сохранит нужные файлы в каталоге C:\SSL и импортирует полученные ключи в Microsoft Exchange Server.
Если мы запускаем команду в оболочке PowerShel, клманда должна начинаться с:
.\wacs.exe …
После успешного выполнения команды, заходим в консоль управления сервером, переходим на вкладку управления сертификатами. В списке мы должны увидеть полученную последовательность от Let’s Encrypt. Кликаем по ней и назначаем сертификат для нужных служб Exchange (как правило, SMTP, IIS).
Возможные ошибки
Рассмотрим некоторые ошибки, с которыми мы можем столкнуться.
1. Missing command line flag or config entry for this setting
Ошибка появляется при попытке обновить сертификат для одного или нескольких доменов.
Причина: при обновлении сертификата, утилита certbot ищет настройки в конфигурационном файле /etc/letsencrypt/renewal/<имя домена>.conf. Если в данном файле не будет определена конфигурация для webroot_map, мы получим данную ошибку.
Решение:
Открываем конфигурационный файл для домена, например:
vi /etc/letsencrypt/renewal/dmoks.ru.conf
Находим опцию webroot_map (как правило, в самом низу). Либо она будет пустой, либо указывать на неправильный путь. Исправляем это:
dmoks.ru = /usr/share/nginx/html
* мы указываем домен и каталог, в котором будет создаваться проверочный файл.
Пробуем обновить сертификат.
2. ACMEv1 is deprecated and you can no longer get certificates from this endpoint
Ошибка появляется при попытке запросить или обновить сертификат. Полный текст ошибки:
Attempting to renew cert (xxx) from /etc/letsencrypt/renewal/xxx.conf produced an unexpected error: urn:acme:error:serverInternal :: The server experienced an internal error :: ACMEv1 is deprecated and you can no longer get certificates from this endpoint. Please use the ACMEv2 endpoint, you may need to update your ACME client software to do so. Visit https://community.letsencrypt.org/t/end-of-life-plan-for-acmev1/88430/27 for more information.. Skipping.
Причина: утилита на компьютере устарела. Она пытается использовать API-портал ACMEv1, который больше не поддерживается.
Решение: обновляем утилиту certbot.
а) Для Ubuntu/Debian:
apt update
apt —only-upgrade install certbot
б) Для Rocky Linux/CentOS:
yum update certbot
3. Remote error: tls: handshake failure
Ошибка появляется при попытке запросить или обновить сертификат.
Причина: Let’s Encrypt отключил устаревшие наборы шифров TLS во время проверки.
Решение: если проверка выполняется на веб через https, то нам потребуется, чтобы последний работал с TLS современной версии. На момент обновления данной инструкции, 1.3.
Чтобы решить проблему, необходимо обновить веб-сервер до актуальной версии. А также убедиться, что в настройках не указаны конкретные шифры без нужной версии. Например, если в NGINX будет настройка:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
… то мы получим ошибку. Для ее решения нужно добавить шифр:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
И не забываем перезапустить nginx:
nginx -t && nginx -s reload
Читайте также
Другие полезные материалы:
1. Примеры редиректов в NGINX.
2. Настройка Apache + SSL для работы сайта по HTTPS.
3. Установка Docker на Linux.
Криптографические сертификаты служат цифровым аналогом удостоверения сайта, что позволяет шифровать подключения с использованием протокола TLS и тем самым обеспечивать безопасное соединение между сервером и клиентом.
Существуют как платные, так и бесплатные центры сертификации. Одним из бесплатных центров является Let’s Encrypt, который выдаёт сертификаты сроком на 90 дней с возможностью продления в автоматическом режиме.
Шаг 1: Подготовка
Предварительно необходимо остановить все службы TrueConf Server, а также все процессы, которые могут занимать порты 80 и 443, например, Apache HTTP Server.
Для создания TLS сертификата на Windows скачайте программу ACME Simple (WACS). Далее следуйте инструкции:
- Распакуйте скачанный архив в папку
C:\wacs\
. - В этой же папке создайте каталог crt.
- В брандмауэре Windows откройте Дополнительные параметры → Правила для входящих подключений → Создать правило → Для порта, в поле Определённые локальные порты впишите через запятую порты 80 и 443 и нажмите Далее. Затем выберите пункт Разрешить подключение, снова нажмите Далее, укажите для каких профилей будет применяться правило (по умолчанию для всех) и после нажатия кнопки Далее сохраните правило под любым именем.
Шаг 2: Создание сертификата
Откройте командную строку (cmd) от имени администратора и запустите утилиту:
Далее поочерёдно выполните следующие команды, вводя в терминале буквы или цифры, соответствующие нужным пунктам. Например, для выполнения команды Create certificate (full options) надо будет ввести m
и нажать Enter (на версии 2.2):
После этого при удачном создании сертификата вы увидите надпись 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, как показано в нашей статье.
Cryptographic certificates are the digital equivalent of website validation, which enables you to encrypt connections using TLS protocol and thus provide a secure link between server and client.
There are both paid and free certification centers. Let’s Encrypt is one of the free centers, which provides certificates for 90 days with an automatic renewal option.
Step 1: Getting started
First, you should stop all TrueConf Server services and all processes that can use 80 and 443 ports, such as Apache Http Server.
To create a TLS certificate on Windows, download the ACME Simple (WACS) program. Then follow the instruction:
- Extract the downloaded archive to the
C:\wacs\
folder. - Create a crt directory in the same folder.
- In Windows Defender Firewall, go to Advanced Settings → Inbound Rules → New Rule → Port; enter 80 and 443 ports separated by comma in the Specific local ports field and click Next. Then select Allow the connection, click Next again, specify which profiles the rule will apply to (for all by default) and after clicking Next, save the rule under any name.
Step 2: Creating a certificate
Open the command line (cmd) as administrator and run the following program:
Next, run the following commands sequentially by entering the letters and digits corresponding to the menu options that you want to select. For example, to run the command Create certificate (full options), you will need to type m
and press Enter. (for version 2.2).
- Start creating the certificate by manually specifying the parameters. To do it, select:
- Create certificate (full options)
- Manual input.
- Specify your domain name and press Enter twice to confirm.
- If necessary, you can create separate certificates for subdomains and hosts. In our case, we will select Single Certificate:
- Then select the following options sequentially:
- [http] Serve verification files from memory
- RSA key
- PEM encoded files (Apache, nginx, etc.).
- Specify a folder for saving certificates
C:\wacs\crt
. - You will be offered to create the password for the private key. Select None.
- Next, select:
No (additional) store steps
No (additional) installation steps
.
- Answer additional questions as follows:
- type
no
for the question Open in default application? - type
yes
for the question Do you agree with terms?.
- type
- Specify an email address for error notifications.
When you successfully create the certificate, you will see the Authorization result: valid
message. Answer no
to the question Do you want to specify the user the task will run as? question.
If a certificate has already been generated for the specified domain name, there will be the corresponding notification in the Existing renewal line. The certificate expiry date will be provided as well. You can create the certificate again by entering yes
in response to the question Overwrite settings?.
Three files will be generated in the C:\wacs\crt
folder:
- domain_name-crt.pem is the certificate itself
- domain_name-key.key is the key file
- domain_name-chain.pem is the trust chain, it includes Let’s Encrypt root and intermediate certificates.
Now you can use them in TrueConf Server, as shown in our article.