Тематические термины: Let’s Encrypt, CentOS, Ubuntu
Процесс в данной статье описан на примере систем Linux CentOS, Ubuntu (Debian) и Windows. Настройка выполняется в несколько шагов.
Прежде чем начать, необходимо знать о некоторых нюансах получения сертификата Let’s Encrypt:
Как было сказано выше, для получения бесплатного сертификата, Let’s Encrypt должен удостовериться, что мы являемся владельцем домена. Свое право на его владение мы можем подтвердить, создав специальную TXT-запись или настроив веб-сервис, который будет отвечать на запросы.
Данный способ немного сложнее для Linux (для Windows все настройки делает утилита автоматически), но позволяет без проблем настроить автоматическое продление.
Запрашивать сертификат Let’s Encrypt проще всего с веб-сервера, на котором запущен сайт для домена. Возможен альтернативный вариант с монтирование сетевой папки, но его рассматривать не будем.
Пример простого конфигурационного файла для NGINX:
server { listen 80; server_name admins24.com; root /usr/share/nginx/html; }
* где admins24.com — домен, для которого работает сайт и для которого мы будем запрашивать сертификат; /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){ rewrite ^ https://…; }
После проверяем конфигурацию и перезапускаем nginx:
service nginx reload
Создаем общий конфигурационный файл, в котором пропишем алиас.
а) для 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
IIS должен отвечать на http-запрос до доменному имени, для которого мы планируем получить сертификат. Также в его настройках мы должны сделать привязку узла, для которого хотим получить сертификат к конкретному сайту. Для этого в консоли управления IIS раскрываем сайты и выбираем нужный нам (в данном примере, он всего один):
В меню справа кликаем по Привязки:
Изменяем привязку для имеющийся записи и, при необходимости, добавляем еще:
Применяем настройки и закрываем консоль управления IIS.
Данный метод проще, описанного выше, но он позволит настроить автоматическое продление сертификата только для некоторых DNS, для которых есть отдельные certbot-плагины. Поэтому данный способ, в большинстве случаев, будет удобен для проведения тестов.
У нас должна быть возможность управления записями в DNS. На данном этапе достаточно просто зайти в панель управления DNS и перейти к этапу получения сертификата (ниже по тексту). Если домен новый и был только-что делегирован на DNS, возможно, придется подождать, пока он не станет доступен для всех серверов DNS в глобальной сети.
а) на CentOS 8:
dnf –enablerepo=PowerTools install certbot
б) на CentOS 7:
yum install certbot
в) на Ubuntu 16.04 и выше, а также Debian:
apt-get install certbot
г) на CentOS 6 или Ubuntu 14.04 / 12.04:
Создадим каталог, в котором будет храниться утилита и переходим в него:
mkdir /opt/certbot
cd /opt/certbot
Загружаем утилиту и разрешаем ее запуск:
wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto
Для удобства, делаем симлинк:
ln -s /opt/certbot/certbot-auto /usr/local/sbin/certbot
Запустим команду:
При первом запуске certbot он автоматически предложит доустановить необходимые зависимости — соглашаемся.
На сайте GitHub скачиваем win-acme pluggable для нужной разрядности операционной системы:
Раcпаковываем скачанный архив в любую папку.
1. Если мы подтверждаем право на домен при помощи веб-сервера, выполняем команду с таким синтаксисом:
certbot certonly –webroot –agree-tos –email <почта администратора домена> –webroot-path <путь до каталога с файлами проверки> -d <домен 1> -d <домен 2> -d …
* где:
а) Пример запроса при использовании веб-сервера NGINX:
certbot certonly –webroot –agree-tos –email [email protected] –webroot-path /usr/share/nginx/html/ -d admins24.com -d www.admins24.com
б) Пример запроса при использовании веб-сервера Apache:
certbot certonly –webroot –agree-tos –email [email protected] –webroot-path /var/www/html/ -d admins24.com -d www.admins24.com
После успешного выполнения команды, сертификаты будут созданы в каталоге /etc/letsencrypt/archive/admins24.com, а также симлинки на них в каталоге /etc/letsencrypt/live/admins24.com. При настройке приложений, стоит указывать пути до симлинков, так как при обновлении файлы в первом каталоге будут меняться, во втором — нет. Публичный ключ будет с именем cert.pem, а приватный — privkey.pem.
2. При подтверждении права на домен с TXT-записью:
certbot certonly –manual –agree-tos –email [email protected] –preferred-challenges=dns -d admins24.com -d www.admins24.com
На запрос подтверждения отвечаем Y — система выдаст что-то на подобие:
Please deploy a DNS TXT record under the name _acme-challenge.admins24.com with the following value:
W2SC9b88y2j2oUjhxVgS7Bphph9g5PqhkBq9KiWkLTm
Once this is deployed,
* Данное сообщение говорит, что мы должны создать TXT-запись _acme-challenge.admins24.com со значением W2SC9b88y2j2oUjhxVgS7Bphph9g5PqhkBq9KiWkLTm.
Создаем соответствующую запись в панели управления DNS, и в консоли сервера нажимаем Enter для продолжения. Если, как в данном примере, мы запрашиваем сертификат для нескольких узлов, повторяем действия.
Открываем командную строку от администратора и переходим в распакованный каталог. Например, если архив распакован на диск C, выполняем:
cd C:win-acme.v2.1.6.773.x64.pluggable
* где 2.1.6.773.x64 — моя версия утилиты.
Запускаем wacs:
Откроется меню с выбором действия — вводим N, чтобы создать новый сертификат:
Выбираем сайт в IIS, который отвечает на запросы нашего домена (в нашем случае, это единственный Default Web Site, то есть 1):
Если для сайта создано несколько привязок, выбираем 3, чтобы создать сертификаты для всех:
Вводим email адрес и подтверждаем корректность данных:
Утилита создаст необходимый каталог для проверки домена, запросит проверку, получит сертификат, добавит привязку к сайту по 443 порту с добавлением полученного сертификата и создаст в планировщике задание на автоматическое продление сертификата.
Смотрим полный путь до скрипта certbot:
which certbot
Открываем на редактирование cron и добавляем следующее:
crontab -e
а) для Ubuntu / Debian:
0 0 * * 1,4 /usr/bin/certbot renew
б) для CentOS:
0 0 * * 1,4 /bin/certbot renew
* в данном примере проверка и продление сертификата будет выполняться по понедельникам и четвергам (1,4) в 00:00. /usr/bin/certbot или /bin/certbot — путь, который мне выдала команда which certbot.
Команда certbot renew проверяет для всех наших сертификатов срок окончания, и если осталось менее 30 дней, запрашивает новый, сохраняет его в каталоге /etc/letsencrypt/archive/<домен> и обновляет симлинк.
Стоит иметь ввиду, что многие приложения, использующие сертификат, потребуют перезапуска, чтобы перечитать его. Поэтому хорошей идеей будет не просто обновлять сертификат, но и перезапускать сервис, который использует сертификат. Например, для NGINX:
0 0 * * 1,4 /bin/certbot renew && systemctl reload nginx
Настройка задания на автоматическое продление создается при получении сертификата. Проверить задание можно в планировщике заданий Windows:
С марта 2018 года появилась возможность получить бесплатный сертификат на все поддомены, например, mail.admins24.com, test.admins24.com, admin.admins24.com (*.admins24.com).
Необходимо, чтобы версия утилиты certbot была 0.22.0 и выше. Проверить текущую версию можно командой:
certbot –version
… если версия ниже, обновляем ее командами:
а) для CentOS / Red Hat:
yum update certbot
apt-get install –only-upgrade certbot
Процесс очень похож на процесс получения сертификата с подтверждением домена в DNS.
Вводим команду:
certbot certonly –manual –agree-tos –email [email protected] –server https://acme-v02.api.letsencrypt.org/directory –preferred-challenges=dns -d admins24.com -d *.admins24.com
* обратим внимание на 2 детали: 1) мы добавили опцию server, чтобы указать, на каком сервере Let’s Encrypt должна проходить проверка DNS; 2) мы получаем сертификат как для *.admins24.com, так и самого admins24.com, так как первое не включает второго.
… система попросит создать TXT-запись в DNS, который обслуживает наш домен:
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – Please deploy a DNS TXT record under the name _acme-challenge.admins24.com with the following value:
DN8ovKFJ0leLQV9ofZ81mYKxojwIaed5g6f0bXZCYiI
Before continuing, verify the record is deployed. – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
* в данном примере система попросила создать TXT-запись _acme-challenge.admins24.com со значением DN8ovKFJ0leLQV9ofZ81mYKxojwIaed5g6f0bXZCYiI.
Заходим в панель управления DNS и создаем нужную запись. Если у нас свой сервер DNS, например, bind, то строка будет такой:
; TXT _acme-challenge IN TXT DN8ovKFJ0leLQV9ofZ81mYKxojwIaed5g6f0bXZCYiI
Не торопимся нажимать Enter — после настройки DNS нужно немного времени (пару минут), чтобы настройка применилась. Проверить появление записи можно командой с рабочего компьютера:
nslookup -type=txt _acme-challenge.admins24.com 8.8.8.8
Как только видим, что настройки применились, нажимаем Enter — если это наш первый запрос Wildcard для данного домена, то система нас попросит создать еще одну запись — повторяем процедуру, создав в DNS вторую запись TXT.
Если все сделали правильно, то увидим:
IMPORTANT NOTES: – Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/admins24.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/admins24.com/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
… сертификат получен.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies