Получение бесплатного SSL сертификата Let’s Encrypt
Обновлено: 23.11.2022
Опубликовано: 22.05.2017
Тематические термины: Let’s Encrypt, CentOS, Ubuntu
Процесс в данной статье описан на примере систем Linux CentOS, Ubuntu (Debian) и Windows. Настройка выполняется в несколько шагов.
Условия получения
Проверка права на домен
Используя веб-сервер
С помощью NS
Установка утилиты для запроса сертификата
Certbot (Linux)
LetsEncrypt-Win-Simple (Windows)
Получение сертификата вручную
На Linux
На Windows
Автоматическое продление
Linux
Windows
Получение Wildcard
Экспорт сертификатов в Windows с закрытым ключом
Возможные ошибки
Читайте также
Условия получения бесплатного сертификата от 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 {
root /usr/share/nginx/html;
allow all;
}
* данными строчками мы говорим, что для всех запросов после /.well-known необходимо отдавать скрипты из каталога /usr/share/nginx/html; allow all предоставляет доступ всем.
При необходимости выполнять проверку и использовать rewrite/return, добавляем что-то подобное:
…
location ~ /.well-known {
root /usr/share/nginx/html;
allow all;
}
if ($uri !~ /.well-known){
return 301 https://$host$request_uri;
}
После проверяем конфигурацию и перезапускаем nginx:
nginx -t
service nginx 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 install certbot
5) на 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
Смотрим полный путь до скрипта certbot:
which certbot
Открываем на редактирование cron и добавляем следующее:
crontab -e
Если система вернет ошибку crontab: command not found, устанавливаем пакет cron:
apt install cron
yum install cron
* перавая команда для Deb, вторая — RPM.
а) для Ubuntu / Debian / Rocky Linux:
0 0 * * 1,4 /usr/bin/certbot renew —noninteractive
б) для CentOS:
0 0 * * 1,4 /bin/certbot renew —noninteractive
* в данном примере проверка и продление сертификата будет выполняться по понедельникам и четвергам (1,4) в 00:00. /usr/bin/certbot или /bin/certbot — путь, который мне выдала команда which certbot.
Команда certbot renew проверяет для всех наших сертификатов срок окончания, и если осталось менее 30 дней, запрашивает новый, сохраняет его в каталоге /etc/letsencrypt/archive/<домен> и обновляет симлинк.
Стоит иметь ввиду, что многие приложения, использующие сертификат, потребуют перезапуска, чтобы перечитать его. Поэтому хорошей идеей будет не просто обновлять сертификат, но и перезапускать сервис, который использует сертификат. Например, для NGINX:
systemctl reload nginx
Однако, нам нужно, чтобы это происходило автоматически. Для этого открываем файл:
vi /etc/letsencrypt/cli.ini
И добавляем строку:
…
deploy-hook = systemctl reload nginx
Windows
Настройка задания на автоматическое продление создается при получении сертификата. Проверить задание можно в планировщике заданий Windows:
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 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
… сертификат получен.
После получения сертификата мы не сможем экспортировать его с закрытым ключом. Мы можем изменить поведение, открыв файл settings.json в распакованном каталоге win-acme. Находим параметр PrivateKeyExportable и задаем ему значение:
«PrivateKeyExportable»: true,
После обновляем сертификат:
.wacs.exe —renew —force
Или без обновления сертификата мы можем найти файл .pfx в каталоге: %programdata%win-acme$baseuri$certificates.
Пароль для pfx можно найти в интерактивном меню wacs:
Manage Renewals > Show details
Возможные ошибки
Рассмотрим некоторые ошибки, с которыми мы можем столкнуться.
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
* мы указываем домен и каталог, в котором будет создаваться проверочный файл.
Пробуем обновить сертификат.
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 —only-upgrade install certbot
б) Для Rocky Linux/CentOS:
yum update certbot
Читайте также
1. Примеры редиректов в NGINX.
В данной статье мы посмотрим, как можно установить бесплатный сертификат Let’s Encrypt на web-сайт, работающий на Internet Information Servises (IIS). Наш справочник уже содержит мануалы по установке такого сертификата на Ubuntu и на CentOs, поэтому отложим теорию и приступим.
В качестве примера для установки сертификата мы будем использовать VPS, работающий на Windows Server 2019. На нашем сервере мы развернули web-сервер из набора серверов IIS, на котором запустили сайт my-domain.host
. Доступ к сайту осуществляется по протоколу http
.
Задача – получить сертификат из Центра Сертификации Let’s Encrypt, установить его на наш web-сервер и привязать к нашему домену. Также, мы перенаправим трафик HTTP на протокол HTTPS. Другими словами, при попытке подключится к сайту по протоколу HTTP, система будет включать протокол HTTPS.
Получение сертификата
Наиболее простым способом установки SSL-сертификата от Let’s Encrypt является применение консольной утилиты WACS (Windows ACME Simple). WACS позволяет осуществить автоматический выпуск и привязку SSL-сертификата к сайтам, работающим на IIS. На момент написания данной статьи актуальной версией утилиты являлась версия v2.1.22.1289. Загрузка клиента WACS доступна со страницы проекта на GitHub – https://github.com/win-acme/win-acme/releases.
После загрузки архива распакуйте его содержимое в каталог C:inetpubletsencrypt
на вашем виртуальном сервере. Далее, запустите на исполнение файл wacs.exe
. В открывшемся меню нужно выбрать опцию создания сертификата с установками по умолчанию. Для того, чтобы это сделать, введите символ N
.
На следующем шаге утилита предложит выбрать сайт, для которого будет выпускаться сертификат. Поскольку в нашем случае в IIS находится всего один сайт, то мы можем нажать Enter. Если в списке будут находиться несколько сайтов, вы можете выбрать один или несколько из них, перечислив их номера через запятую. После чего нажмите символ A
, чтобы выбрать все привязки, и символ y
, чтобы подтвердить свой выбор.
Далее, утилита предложит открыть для прочтения Пользовательское соглашение, после чего попросит вас подтвердить своё согласие с ним. Необходимо будет ещё раз нажать y
.
После этого нужно будет ввести адрес электронной почты для связи с вами по возможным проблемам с SSL-сертификатом. Далее, утилита запустит процесс выпуска сертификата и привязки его к указанным вами доменам. В заключении нажмите Q
для завершения работы WACS.
После этого ваш домен должен уже быть доступен при подключении к нему с использованием протокола HTTPS. Проверьте это, набрав в браузере имя вашего сайта с префиксом https://
.
Настройка протокола HTTPS
В менеджере IIS установленный сертификат можно просмотреть через меню Bindings...
Для этого следует выбрать требуемый сайт с типом https
, нажать Edit
и в строке SSL certificate
нажать View...
Плюс ко всему, утилита WACS создаёт задание в Планировщике заданий (Task Scheduler), предназначенное для продления срока действия установленного сертификата в автоматическом режиме. Задание будет ежедневно запускать на исполнение следующую команду:
C:inetpubletsencryptwacs.exe --renew --baseuri "https://acme-v02.api.letsencrypt.org/"
Поскольку наш сайт теперь доступен по 443-му порту (протокол HTTPS), есть смысл отказаться от использования доступа по протоколу HTTP. Для этого необходимо перенаправить трафик HTTP на наш HTTPS-сайт. Чтобы это сделать, потребуется произвести на сервере установку модуля Microsoft URL Rewrite Module. Данный софт доступен для загрузки по ссылке – https://www.iis.net/downloads/microsoft/url-rewrite.
После установки утилиты в профиле сайта на IIS появится кнопка URL Rewrite
.
Используя её нужно будет создать новое правило для перенаправления трафика: Actions
🠒 Add Rule(s)....
🠒 Blank rule
. В строке Name
укажите имя для нового правила (в нашем примере это – HTTP Redirect Rule
). В строке Requested URL
следует выбрать Matches the Pattern
, в строке Pattern
наберите (.*)
. Также, в блоке настроек Conditions
в строке Logical Grouping
выберите Match All
и нажмите Add
. В окне Add Condition
в строке Condition input
укажите {HTTPS}
, в строке Check if input string
выберите Matches the Pattern
, в строке Pattern
наберите ^OFF$
. После чего нажмите ОК
.
Также, в блоке настроек Action
укажите Redirect
в строке Action type
, в строке Redirect URL
наберите https://{HTTP_HOST}/{R:1}
и в строке Redirect type
выберите Permanent (301)
. Завершив настройки, примените внесённые изменения при помощи Apply
в правом верхнем углу окна Internet Information Servises (IIS) Manager.
Теперь, перейдя в браузере по адресу вашего сайта с использованием протокола HTTP, веб-сервер должен будет перенаправить вас на адрес вашего сайта, но уже с префиксом https://
.
Вместо заключения
В заключение всё-таки несколько слов о теории.
SSL-сертификаты делятся на три основных типа:
- сертификаты, выпускаемые через проверку прав на домен – Domain Validated (DV);
- сертификаты, подтверждающие домен и его принадлежность конкретному юридическому лицу – Organization Validation (OV);
- и, наконец, сертификаты с расширенной проверкой – Extended Validation (EV).
Сертификат от Let’s Encrypt, получение которого мы описали в данном руководстве, относится к первой категории.
Также, сертификаты могут быть платными и бесплатными. Рассмотренный в нашей статье SSL-сертификат от Let’s Encrypt является бесплатным. Но является ли это его неоспоримым преимуществом?
С одной стороны, да. Бесплатный сертификат обходится потребителю заведомо дешевле, чем платный. Но, с другой стороны, бесплатные сертификаты всё же имеют некоторые минусы. Во-первых, бесплатные сертификаты имеют сравнительно короткий срок действия. По истечении его сертификату требуется перевыпуск. Происходит это постоянно через определённые промежутки времени. Во-вторых, Удостоверяющие Центры, выпускающие платные SSL-сертификаты, проверяют владельцев доменов. Тем самым они формируют более высокое доверие к сайту со стороны поисковых систем и пользователей. В третьих, преимуществом платных сертификатов является наличие финансовых обязательств Центра Сертификации перед доменом. Другими словами, при утечке с ресурса пользовательских данных пострадавший сайт получит компенсацию. Конечно, при условии, что на сайте использовался платный сертификат.
В этом обзоре мы расскажем об особенностях установки и привязки бесплатного TLS/SSL сертификата от Let’s Encrypt для сайта на веб сервере IIS, запущенного на Windows Server 2019/2016/2012 R2.
Содержание:
- Let’s Encrypt и ACME клиенты для Windows
- Клиент WACS для установки TLS сертификата Let’s Encrypt в IIS на Windows Server
- Перенаправление трафика IIS сайта с HTTP на HTTPS адрес
- Использование сертификата Let’s Encrypt для Remote Desktop Services
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:inetpubletsencrypt
Откройте командную строку с правами администратора, перейдите в каталог 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 смогут провести валидацию.
Примечание. При выполнении TLS/HTTP проверки ваш сайт должен быть доступен снаружи по полному DNS имени по протоколам HTTP (80/TCP) и HTTPS (443/TCP).
Утилита WACS сохраняет закрытый ключ сертификата (*.pem), сам сертфикат и ряд других файлов в каталог C:Users%username%AppDataRoamingletsencrypt-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:inetpubletsencryptwacs.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.
Если на Remote Desktop Gateway сервере поднята также роль RDSH, нужно запретить пользователям Read доступ к каталогу, в котором у вас хранится WACS (в моем примере это c:inetpubletsencrypt ) и к каталогу с сертификатами сертификат Let’s Encrypt (C:ProgramDatawin-acme).
Затем на сервере 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 скрипт присланы нашим читателем Антоном, за что посылаем ему лучи благодарности!
Вы можете запустить это скрипт вручную:
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 добавьте новое задание, которое запускает скрипт ImportRDGateway_Cert_From_IIS.ps1 после обновления сертификата.
Чтобы не менять разрешения на выполнение скриптов PowerShell, вы можете вызывать скрипт командой:
PowerShell.exe -ExecutionPolicy Bypass -File c:inetpubletsencryptImportRDGateway_Cert_From_IIS.ps1
Теперь скрипт привязки SSL сертификата к службам RDS будет выполнятся сразу после продления сертификата Let’s Encrypt. При этом автоматически перезапускается служба RD Gateway командой:
Restart-Service TSGateway
При перезапуске службы TSGateway все текущие сессии пользователей разрываются, поэтому желательно изменить периодичность запуска задания обновления сертфиката на 1 раз в 60 дней.
Также вы можете использовать бесплатные сертификаты Let’s Encrypt в Linux для веб сайтов на Nginx или apache.
Отметим, что сертификаты Let’s Encrypt в настоящий момент широко используются на сайтах многих крупных компаний и им доверяют все браузеры. Надеюсь, что судьба бесплатного центра сертификации Let’s Encrypt не постигнет участь WoSign и StartCom.
Криптографические сертификаты служат цифровым аналогом удостоверения сайта, что позволяет шифровать подключения с использованием протокола 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) от имени администратора и поочерёдно введите следующие команды:
- Выполните
C:wacswacs.exe
. - Далее выберите:
Create new certificate (full options)
(введитеm
);Manual input
(введите1
).
- Укажите ваше доменное имя и два раза нажмите Enter для подтверждения.
- Затем последовательно выберите:
[http-01] Serve verification files from memory
(введите2
);RSA key
(введите2
);PEM encoded files (Apache, nginx, etc.)
(введите2
).
- Укажите папку для сохранения сертификатов
C:wacscrt
. - После этого выберите:
No (additional) store steps
(введите3
);No (additional) installation steps
(введите4
).
- Укажите адрес электронной почты для уведомлений об ошибках.
- На дополнительные вопросы отвечайте следующим образом:
- на вопрос
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
.
В папке C:wacscrt
сгенерируются 3 файла:
- имя_домена-crt.pem — сам сертификат;
- имя_домена-key.key — файл ключа;
- имя_домена-chain.pem — цепочка доверия, включает корневой и промежуточный сертификаты Let’s Encrypt.
Теперь вы можете использовать их в TrueConf Server, как показано в нашей статье.
Читайте также
Сегодня уже очень сложной обойтись без сертификатов. Какие-то сервисы или веб-сайты еще могут работать как без сертификатов, так и с ним. Однако, есть сервисы, которые уже не могут работать без сертификатов. Если для “боевого” сервиса часто покупается коммерческий сертификат как минимум на год, то для демонстрационных или тестовых стендов отдельный коммерческий сертификат покупается редко. Выпуск бесплатного сертификата Let’s Encrypt может быть очень к месту в таких ситуациях.
Let’s Encrypt – это центр сертификации, который занимается выдачей бесплатных сертификатов. Срок действия сертификата – 3 месяца. Поддерживается выпуск как широкоименных (wildcard), так и именных сертификатов, в т.ч. с несколькими именами (через атрибут SAN).
Выпуск бесплатного сертификата Let’s Encrypt возможен через любой клиент, который поддерживает ACME протокол. Существует большое количество таких клиентов практически под любую платформу и ситуацию. При определенной настройке можно автоматизировать процесс выпуска сертификата, т.е. вам не придётся продлять его каждый раз руками.
Мы рассмотрим выпуск бесплатного сертификата Let’s Encrypt через win-acme клиент. Лично мне довольно часто приходится использовать этот клиент для выпуска сертификатов на тестовые или отладочные стенды Exchange, Skype for Business, AD FS и ряд других сервисов.
Кстати, сертификат для веб-сервера этого блога также от Let’s Encrypt 🙂
Выпуск сертификата через win-acme клиент
Как мы говорили выше мы будем использовать win-acme клиент для выпуска сертификата. Сертификат мы будем выпускать в PFX-формате, чтобы его было удобнее импортировать в хранилище сертификатов Windows. Этот клиент также поддерживает выпуск сертификатов в формате с раздельными файлами для закрытого ключа и сертификата.
Мы будем выпускать wildcard сертификат для следующего имени – *.itproblog.ru
Для выпуска бесплатного сертификата Let’s Encrypt через win-acme клиент необходимо выполнить следующие шаги:
1. Загрузить клиент с сайта разработчика.
2. Распаковать загруженный архив:
3. Запустить cmd.exe от имени администратора, перейти в распакованную в п. 2 директорию и выполнить команду:
wacs.exe
Появится приветствие win-acme клиента:
4. Укажем, что мы хотим выпустить сертификат и при этом не использовать настройки по умолчанию, а указать те настройки, которые необходимы нам:
5. Укажем, что мы вручную перечислим необходимые нам имена:
6. Теперь нам необходимо указать имя, для которого мы планируем выпустить сертификат. Если необходимо указать несколько имен, то нужно указать их через запятую.
7. Клиент попросит указать дружественное имя сертификата, т.е. имя, которое будет отображаться при импорте в хранилище сертификатов Windows. Можем указать свое имя, либо оставить имя по умолчанию.
8. Теперь нам необходимо подтвердить право владения доменом. Это можно сделать несколькими способами. Мы укажем, что вручную создадим необходимые DNS записи:
9. Мы будем использовать RSA ключи:
10. Нам будет нужен сертификат в PFX формате – укажем это:
11. Укажем директорию для генерируемого PFX файла и пароль к нему:
12. Мы не планируем куда-то еще записывать наш сертификат:
13. Необходимые изменения в конфигурацию наших приложений мы внесем самостоятельно вручную. Укажем это:
14. Теперь нам необходимо создать запись в нашей DNS зоне для того, чтобы подтвердить право владения доменом. Параметры DNS записи нам генерирует win-acme клиент:
15. Процедура регистрация TXT записи для каждого хостера вашей зоны своя. В нашем случае уже добавленная запись выглядит следующим образом:
16. Теперь вернемся в наш win-acme клиент и нажмем Enter. После удачной проверки записи клиент попросит нас удалить её:
17. После этого win-acme клиент сгенерируют сертификат в форме PFX, о чем напишет нам в консоль:
18. Клиент теперь можно закрыть, а в директории, которую мы указывали для генерации сертификата мы должны увидеть итоговый PDF-файл:
Выпуск бесплатного сертификата Let’s Encrypt через win-acme клиент выполнен.
Заключение
В данной публикации было кратко рассказано об одном из методов, который можно использовать для выпуска бесплатного сертификата. Мы рассмотрели процесс выпуска бесплатного сертификата Let’s Encrypt через win-acme клиент.
Сегодня автоматизируем установку бесплатного SSL сертификата на сайт, который работает на web-сервере IIS 10. Операционная система Microsoft Windows 2016. Сертификат выдается лишь на 90 дней, но его всегда можно быстро обновить в автоматическом режиме.
Наличие SSL сертификата для сайта позволяет защитить данные пользователей, передаваемые по сети и гарантировать целостность переданных данных. Хотя, если вы попали на эту статью, то вы уже знаете для чего вам нужен сертификат.
Let’s Encrypt — центр сертификации, начавший работу в бета-режиме с 3 декабря 2015 года, предоставляющий бесплатные криптографические сертификаты X.509 для TLS-шифрования (HTTPS). Процесс выдачи сертификатов полностью автоматизирован. https://letsencrypt.org/
Для установки сертификата будем использовать консольную утилиту LetsEncrypt-Win-Simple.
Подготовка
LetsEncrypt-Win-Simple берём здесь:
https://github.com/PKISharp/win-acme/releases
Я скачал версию v2.0.5.246. Распаковываем архив.
Папка win-acme.v2.0.5.246 нам потом пригодится для автоматического продления сертификатов, которое будет запускаться через Task Scheduler, не удаляйте.
При запуске wacs.exe хочет .NET Framework 4.7.2.
Нас отправляют на сайт:
https://dotnet.microsoft.com/download/thank-you/net472
Качаем .NET Framework 4.7.2 и запускаем установку.
Принимаем лицензионное соглашение, Install.
Ждём.
.NET Framework 4.7.2 установлен.
Перезагружаем сервер. Подготовка к установке сертификатов завершена.
Устанавливаем SSL сертификат
Запускаем wacs.exe под администратором.
Для начала сгенерируем простой сертификат. Для этого выбираем Create new certificate, N. Нас спрашивают, какой сертификат делаем.
Для тестирования генерируем простой сертификат без псевдонимов (для установки сертификата с псевдонимами выберите 2). Пишем 1. Нам показывают список всех доменов, забинденных в IIS.
Жертвой будет setpizza.com. Пишем 5.
Нужно зарегистрироваться, указываем свой e-mail администратора, или несколько через запятую.
Нужно принять лицензионное соглашение. Если написать «y», то откроется PDF файл с соглашением. Принимаем лицензионное соглашением.
Готово.
Проверяем сертификат
Заходим на https://setpizza.com/
Всё работает, сертификат есть.
В хранилище сертификатов:
Let’s Encrypt устанавливает также сертификаты промежуточных центров сертификации.
443 порт добавился автоматически, сертификат выбрался автоматически.
В планировщике добавилось ежедневное правило для обновления сертификатов.
Дополнительные настройки
Вы можете настроить почту для уведомлений.
Как нам подсказывают, нужно ручками подправить файл settings.config.
<setting name="SmtpServer" serializeAs="String">
<value>localhost</value>
</setting>
<setting name="SmtpPort" serializeAs="String">
<value>25</value>
</setting>
<setting name="SmtpUser" serializeAs="String">
<value />
</setting>
<setting name="SmtpPassword" serializeAs="String">
<value />
</setting>
<setting name="SmtpSecure" serializeAs="String">
<value>False</value>
</setting>
<setting name="SmtpSenderName" serializeAs="String">
<value>Let's Encrypt</value>
</setting>
<setting name="SmtpSenderAddress" serializeAs="String">
<value>admin@yourdomain1.ru</value>
</setting>
<setting name="SmtpReceiverAddress" serializeAs="String">
<value>admin@yourdomain2.ru</value>
</setting>
<setting name="EmailOnSuccess" serializeAs="String">
<value>True</value>
</setting>
Лучше генерировать сертификаты с псевдонимами, например:
Принцип понятен, дальше разберётесь.