Разное

Certbot auto renew: How to Setup Auto-Renew for Let’s Encrypt SSL Certificates (Apache) – One Page Zen

Содержание

Автоматическое продление SSL-сертификата Let’s Encrypt для доменов с помощью Certbot

После установки SSL-сертификата Let’s Encrypt и перевод работы NGiNX по протоколу HTTPs последнее, что необходимо сделать, — это настроить автоматическое обновление сертификатов. Политика Let’s Encrypt такова, что свои бесплатные SSL-сертификаты они выдают сроком на 3 месяца (на самом деле, на 90 дней) аргументируя это тем, чтобы владельцы сайтов озаботились как раз этим самым автоматическим обновлением и просто забыли про то, что раз в год надо что-то покупать, встраивать и донастраивать. Хорошая политика! Мне нравится.

Запись в cron автоматического обновления SSL-сертификата Let’s Encrypt для доменов с помощью Certbot

Разные источники (авторы разных статей) в интернете пишут разные способы для автоматического продления SSL-сертификата Let’s Encrypt. Однако, если Certbot был установлен под Debian (то, как сделал я), то стоит заглянуть в cron на сервере, а конкретно в файл, находящийся тут → /etc/cron.d/certbot. И прежде, чем начинать шаманить, посмотреть его содержимое:

# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc.  Renewal will only occur if expiration
# is within 30 days.
#
# Important Note!  This cronjob will NOT be executed if you are
# running systemd as your init system.  If you are running systemd,
# the cronjob.timer function takes precedence over this cronjob.  For
# more details, see the systemd.timer manpage, or use systemctl show
# certbot.timer.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

Что-то мне подсказывает, что при установке Certbot, этот файл был создан автоматически и именно с целью автоматизации дальнейшего управлению валидностью SSL-сертификатов. И больше делать уже ничего не требуется.

Резюме

Через пару месяцев нужно будет глянуть на состояние SSL-сертификатов сайтов, а пока по моим прикидкам, нужно перетащить все свои проекты на использование HTTPs протокола и слить с зеркалами HTTP, явно указав в Яндекс.Вебмастере, что это конкретный переезд на HTTPs… И заняться другими интересными делами, которые у меня в планах.

P.S.

Интересное наблюдение. Certbot мало того, что Pyton притащил при установке, он ещё и Perl похоже припёр. Проверил: Perl реально установлен на сервере. И уже останется загадкой, каким ветром его принесло (выяснять сейчас откуда он взялся — просто лень).

Заберите ссылку на статью к себе, чтобы потом легко её найти 😉

Выберите, то, чем пользуетесь чаще всего:

Спасибо за внимание, оставайтесь на связи! Ниже ссылка на форум и обсуждение ; )

Как использовать Certbot в автономном режиме для получения SSL-сертификатов Let’s Encrypt в Debian 9

Вступление

Let’s Encrypt — это сервис, предлагающий бесплатные SSL-сертификаты через автоматизированный API. Самый популярный клиент Let’s Encrypt — EFF ‘s Certbot.

Certbot предлагает различные способы проверки вашего домена, получения сертификатов и автоматической настройки Apache и Nginx. В этом руководстве мы обсудим автономный режим Certbot и его использование для защиты других типов служб, таких как почтовый сервер или брокер сообщений, такой как RabbitMQ.

Мы не будем обсуждать детали конфигурации SSL, но когда вы закончите, у вас будет действительный сертификат, который автоматически обновляется. Кроме того, вы сможете автоматизировать перезагрузку службы для получения обновленного сертификата.

Предпосылки

Перед началом этого урока вам понадобится:

  • Сервер Debian 9 с пользователем без полномочий root, пользователем sudo и базовым брандмауэром, как описано в этом руководстве по настройке сервера Debian 9.
  • Доменное имя указывало на ваш сервер. В этом руководстве будет использоваться example.com повсюду.
  • Порт 80 или 443 должен быть не использован на вашем сервере. Если сервис вы пытаетесь обеспечить на компьютере с веб — сервером, который занимает обе эти порты, вам нужно использовать другой режим, например, Certbot в WebRoot режиме или в режиме вызова DNS на основе.

Шаг 1 — Установка Certbot

Debian 9 включает клиент Certbot в свой репозиторий по умолчанию, и он должен быть достаточно современным для базового использования. Если вам нужно выполнить задачи на основе DNS или использовать другие более новые функции Certbot, вам следует вместо этого установить из репозитория, stretch-backports как указано в официальной документации Certbot.

Используйте apt для установки certbot пакета:

sudo apt install certbot

Вы можете проверить свою установку, попросив certbot вывести ее номер версии:

certbot --version

Output
certbot 0.28.0

Теперь, когда у нас установлен Certbot, давайте запустим его, чтобы получить наш сертификат.

Шаг 2 — Запуск Certbot

Certbot должен ответить на криптографический вызов, созданный API Let’s Encrypt, чтобы доказать, что мы контролируем наш домен. Для этого используются порты 80(HTTP) или 443(HTTPS). Откройте соответствующий порт в брандмауэре:

sudo ufw allow 80

Замените 443 выше, если это порт, который вы используете. ufw выведет подтверждение, что ваше правило было добавлено:

Output
Rule added
Rule added (v6)

Теперь мы можем запустить Certbot, чтобы получить наш сертификат. Мы будем использовать эту —standalone опцию, чтобы сообщить Certbot о необходимости решения проблемы с помощью своего собственного встроенного веб-сервера. —preferred-challenges Инструктирует Certbot использовать порт 80 или порт 443. Если вы используете порт 80, вы хотите —preferred-challenges http. Для порта 443 это было бы —preferred-challenges tls-sni. Наконец, -d флаг используется для указания домена, для которого вы запрашиваете сертификат. Вы можете добавить несколько -d вариантов, чтобы охватить несколько доменов в одном сертификате.

sudo certbot certonly --standalone --preferred-challenges http -d example.com

При запуске команды вам будет предложено ввести адрес электронной почты и принять условия обслуживания. После этого вы должны увидеть сообщение о том, что процесс прошел успешно и где хранятся ваши сертификаты:Output
IMPORTANT NOTES:
 — Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2019-08-28. 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»
 — Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 — 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

У нас есть наши сертификаты. Давайте посмотрим, что мы скачали и как использовать файлы с нашим программным обеспечением.

Шаг 3 — Настройка вашего приложения

Настройка вашего приложения для SSL выходит за рамки этой статьи, поскольку у каждого приложения есть свои требования и параметры конфигурации, но давайте посмотрим, что Certbot загрузил для нас. Используйте ls для вывода каталога, в котором находятся наши ключи и сертификаты:

sudo ls /etc/letsencrypt/live/example.com

Output
cert.pem  chain.pem  fullchain.pem  privkey.pem  README

README Файл в этом каталоге имеет больше информации о каждом из этих файлов. Чаще всего вам понадобятся только два из этих файлов:

privkey.pem: Это закрытый ключ для сертификата. Это необходимо сохранить в секрете, поэтому большая часть /etc/letsencrypt каталога имеет очень ограниченные разрешения и доступна только пользователю root. Большая часть конфигурации программного обеспечения будет ссылаться на это как нечто подобное ssl-certificate-key или ssl-certificate-key-file.
fullchain.pem: Это наш сертификат в комплекте со всеми промежуточными сертификатами. Большая часть программного обеспечения будет использовать этот файл для фактического сертификата и будет ссылаться на него в своей конфигурации с именем, подобным «ssl-Certificate».
Для получения дополнительной информации о других имеющихся файлах обратитесь к разделу «Где мои сертификаты» документации Certbot.

Некоторому программному обеспечению потребуются его сертификаты в других форматах, в других местах или с другими разрешениями пользователя. Лучше всего оставить все в letsencrypt каталоге и не изменять какие-либо разрешения в нем (разрешения будут перезаписаны в любом случае при обновлении), но иногда это просто не вариант. В этом случае вам нужно написать скрипт для перемещения файлов и изменения прав доступа по мере необходимости. Этот скрипт нужно будет запускать всякий раз, когда Certbot обновляет сертификаты, о которых мы поговорим позже.

Шаг 4 — Обработка автоматических продлений Certbot

Сертификаты Let’s Encrypt действительны только в течение девяноста дней. Это должно стимулировать пользователей автоматизировать процесс обновления их сертификатов. certbot Пакет, который мы установили заботится об этом для нас, добавляя возобновлять сценарий к /etc/cron.d. Этот скрипт запускается два раза в день и обновляет любой сертификат, срок действия которого истекает в течение тридцати дней.

Поскольку наши сертификаты обновляются автоматически, нам все еще нужен способ запускать другие задачи после обновления. Нам нужно по крайней мере перезапустить или перезагрузить наш сервер, чтобы получить новые сертификаты, и, как уже упоминалось в шаге 3, нам, возможно, потребуется каким-то образом манипулировать файлами сертификатов, чтобы они работали с программным обеспечением, которое мы используем. Это цель варианта Certbot renew_hook.

Чтобы добавить renew_hook, мы обновляем файл конфигурации обновления Certbot. Certbot запоминает все детали того, как вы впервые получили сертификат, и будет работать с теми же параметрами при обновлении. Нам просто нужно добавить в наш крючок. Откройте файл конфигурации в вашем любимом редакторе:

sudo nano /etc/letsencrypt/renewal/example.com.conf

Откроется текстовый файл с некоторыми параметрами конфигурации. Добавьте свой крючок в последнюю строку:

renew_hook = systemctl reload rabbitmq

Измените приведенную выше команду на все, что вам нужно, чтобы перезагрузить сервер или запустить собственный скрипт проверки файлов. Обычно в Debian вы чаще всего будете использовать systemctl для перезагрузки сервиса. Сохраните и закройте файл, затем выполните пробный запуск Certbot, чтобы убедиться, что синтаксис в порядке:

sudo certbot renew --dry-run

Если вы не видите ошибок, все готово. Certbot настроен на обновление при необходимости и запуск любых команд, необходимых для получения вашего сервиса с использованием новых файлов.

Заключение

В этом руководстве мы установили клиент Certbot Let’s Encrypt, загрузили сертификат SSL в автономном режиме и включили автоматическое продление с помощью перехватчиков возобновления. Это должно дать вам хорошее начало использования сертификатов Let’s Encrypt с сервисами, отличными от вашего обычного веб-сервера.

Для получения дополнительной информации, пожалуйста, обратитесь к документации Certbot.

🔏 Как принудительно продлить сертификат Let’s Encrypt — Information Security Squad

Как принудительно обновить сертификат Letsencrypt в системах Ubuntu, Debian, CentOS, RHEL, Fedora или FreeBSD Unix?

Как вы знаете, Let’s Encrypt — это бесплатный, автоматизированный центр сертификации или удостоверящий центр, который можно использовать для выдачи сертификатов TLS / SSL для веб-серверов, почтовых серверов и многого другого.

В этом руководстве объясняется, как принудительно обновить сертификат Let Encrypt в Linux, FreeBSD и Unix-подобных системах с помощью инструментов CLI.

Как принудительно продлить сертификат Let’s Encrypt

В Linux и Unix существует несколько способов выпуска и обновления сертификатов Letsencrypt TLS / SSL.

Мы всегда можем принудительно продлить срок действия сертификата, даже если срок его действия истек.

Однако в этом руководстве мы собираемся использовать два наиболее популярных инструмента командной строки:

  1. certbot — запросить новый сертификат с помощью команды certbot renew —force-renewal. Мы можем указать домены, используя опцию -d. Например, certbot -d itsecforu.ru, www.itsecforu.ru, test.itsecforu.ru
  2. acme.sh — принудительно обновить сертификат , используя acme.sh -f -r -d www.itsecforu.ru

Обновление сертификата LetsEncrypt с помощью certbot

Certbot — самый популярный инструмент для:

  • Автоматического доказательства Let Encrypt CA, что вы контролируете веб-сайт
  • Получение сертификата и настройки его на своем веб-сервере.
  • Отслеживания, когда истечет срок действия вашего сертификата, и продление его срока.
  • Помощи пользователям в отозыве сертификата, если это когда-нибудь понадобится
  • Обновления сертификата принудительно, если возникнет такая необходимость

Основной целью инструмента командной строки certbot является настройка HTTPS-сервера и автоматическое получение доверенного сертификата без вмешательства человека.

Однако в некоторых случаях процесс обновления завершается неудачей по разным причинам, и для принудительного обновления необходимо выполнить следующую команду вручную:

certbot --force-renewal
certbot --force-renewal -d domain-name-1-here,domain-name-2-here
certbot --force-renewal -d www.itsecforu.ru,itsecforu.ru

для получения дополнительной информации или используйте следующую команду:

certbot --help
certbot --help all

отфильтруйте опцию обновления, используя команду grep / egrep
certbot --help all | grep -i force
certbot --help all | egrep -i 'renewal|force'

Как обновить определенный сертификат с помощью acme.sh

Синтаксис выглядит следующим образом:

acme.sh -f -r -d {your-domain-here}
acme.sh --force --renew --domain {your-domain-name-here}
acme.sh -f -r -d www.itsecforu.ru
acme.sh -f -r -d www.itsecforu.ru -d server1.itsecforu.ru

Где:

  • —renew или -r: обновить сертификат.
  • —domain или -d: указывает домен, используемый для выдачи, продления или отзыва и т. д.
  • —force или -f: используется для принудительной установки или немедленного обновления сертификата.

Перезапустите / перезагрузите ваш веб-сервер и сервис

Наконец, перезапустите сервер Nginx или перезапустите веб-сервер Apache, чтобы изменения вступили в силу.

Другими словами, вам нужно перезапустить ваш веб-сервер, чтобы клиенты могли видеть обновленные сертификаты:

sudo service nginx reload
## или ##
sudo service httpd reload
## Systemd GNU/Linux ##
sudo systemctl reload nginx.service
sudo systemctl reload httpd.service
sudo systemctl reload apache2.service

Заключение

Из этого руководства вы узнали, как обновить бесплатные SSL / TLS-сертификаты Let Encrypt для веб-сервера Nginx или Apache, работающего в системах, подобных Linux или Unix.

см. также:

🔐 Как автоматически продлевать сертификаты Let’s Encrypt

◀️ Настройка Jenkins за обратным прокси-сервером Nginx и SSL шифрованием Let’s Encrypt

Начало работы с acme.sh и клиентом Let’s Encrypt SSL

FreeBSD wget не может проверить сертификат, выданный Let’s Encrypt

🔐 Как настроить Let Encrypt SSL на Apache в Fedora

Настройка OpenConnect VPN Server (ocserv) на Ubuntu 16.04 / 17.10 с Let’s Encrypt

🔑 Убедитесь, что ваш домен не подвержен уязвимости Letsencrypt CAA Recheck

🐳 Настройка локального реджестри для Docker контейнеров с помощью Podman & Let’s Encrypt SSL

🔑 Как обезопасить Nginx с помощью Let’s Encrypt на CentOS 8

📧 Безопасный сервер iRedMail с SSL-сертификатом Let Encrypt

 

Как получить сертификат Let’s Encrypt

В последнее время забота о безопасности и приватности пользователей набирает обороты. Когда проектировался интернет и протокол HTTP, о таких понятиях не думали. Поэтому весь трафик, передаваемый между веб-сервером и пользователем по протоколу HTTP, может быть просмотрен кем угодно, кто находится на пути этого трафика, например провайдером или хакерами.

Поэтому был придуман протокол HTTPS, который позволяет шифровать трафик и таим образом обезопасить его от перехвата. Для шифрования используются SSL-сертификаты. Раньше эти сертификаты стояли денег, но благодаря компании Let’s Encrypt теперь любой веб-сайт может установить SSL-сертификат и настроить шифрование абсолютно бесплатно. В этой статье мы рассмотрим, как получить сертификат Let’s Encrypt с помощью официального клиента Certbot.

Получение сертификата Let’s Encrypt

Вообще, нам не обязательно использовать именно Certbot, мы могли бы создать сертификат в OpenSSL, а затем просто подписать его с помощью ACME API от Let’s Encrypt. Но к этому API надо выполнять запросы в формате JSON, что очень неудобно делать из командной строки, поэтому лучше использовать один из клиентов. Например Certbot. К тому же, большинство клиентов ACME уже включают автоматическую генерацию сертификата в OpenSSL.

1. Синтаксис и команды Certbot

Прежде чем перейти к работе, давайте рассмотрим синтаксис утилиты Certbot и её команды. Они выглядят достаточно просто:

certbot команда опции -d домен

Команды используются для того, чтобы сообщить утилите, что именно надо сделать. Вот основные из них:

  • run — используется по умолчанию, если никакая команда не указана, получает и устанавливает сертификат;
  • certonly — только получает или обновляет сертификат, но не устанавливает его;
  • renew — обновляет сертификат;
  • enhance — добавляет настройки безопасности для существующих сертификатов;
  • certificates — отображает установленные сертификаты;
  • revoke — отзывает сертификат;
  • delete — удаляет сертификат;
  • register — создает ACME-аккаунт;

Как видите, команд не так много, и теперь вы в них точно не запутаетесь, а теперь разберём основные опции:

  • -d — указывает домен или список доменов, разделённых запятыми, для которых надо получить сертификаты;
  • —apache — использовать плагин apache для установки сертификата;
  • —nginx — использовать плагин nginx;
  • —standalone — запускать собственный веб-сервер для аутентификации при получении сертификата;
  • —preferred-challenges — позволяет выбрать способ аутентификации, по умолчанию http, но можно выбрать dns;
  • —server — позволяет указать адрес ACME-сервера, нужно для WildCard-сертификатов, поскольку они поддерживаются только второй версией ACME;
  • —webroot — поместить файлы аутентификации в папку веб-сервера;
  • -w — указывает папку веб-сервера, куда надо поместить файлы аутентификации;
  • —manual — создание сертификата в ручном режиме;
  • -n — запустить утилиту в не интерактивном режиме;
  • —dry-run — тестовый запуск без сохранения изменений на диск.

Теперь мы готовы к тому, чтобы перейти к работе с утилитой. Сначала установим её.

2. Установка Certbot

Сначала необходимо установить утилиту Certbot. Это официальный клиент, и он есть в репозиториях большинства дистрибутивов. Установка Certbot в Ubuntu выполняется из PPA:

sudo apt install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt update
sudo apt install certbot

Если вы знаете, для какой платформы будут генерироваться сертификаты, то можно установить отдельные расширения для них, они позволяют автоматически редактировать конфигурацию. Например, вы можете установить модуль для apache или nginx:

sudo apt install python-certbot-apache
sudo apt install python-certbot-nginx

Эти плагины нужны, если вы собираетесь использовать соответствующие опции для автоматической установки.

3. Создание сертификата без установки

Если вам нужен сертификат для веб-сервера, который не поддерживается программой, вам придётся устанавливать его вручную. Получить такой сертификат можно с помощью команды certonly:

sudo certbot certonly --webroot -w /var/www/test.losst.ru -d test.losst.ru -d www.test.losst.ru

 

Эта команда получает сертификат для доменов test.losst.ru и www.test.losst.ru. Файлы для подтверждения аутентификации будут размещены в каталоге /var/www/example/. Также вы можете использовать встроенный веб-сервер для аутентификации:

sudo certbot certonly --standalone -d test.losst.ru -d www.test.losst.ru

Во время генерации сертификата утилита спросит ваш Email-адрес для аккаунта ACME, на который будут приходить уведомления о необходимости продления и другая информация:

 

Затем вам предложат подтвердить, что вы прочитали правила использования сервиса, ответьте А:

 

Далее вас спросят, хотите ли вы сделать ваш Email публичным:

Только после этого начнётся получение сертификата. Если всё прошло успешно, то ваш сертификат будет сохранён в /etc/letsencrypt/live/имя_домена/, оттуда вы уже можете использовать их в своих приложениях. Если же возникли ошибки, то утилита сообщит об этом.

4. Создание сертификата для Nginx

Вам не обязательно вручную устанавливать сертификаты, вы можете использовать один из доступных плагинов для автоматического обновления конфигурации. Например, рассмотрим использование плагина для Nginx:

sudo certbot run --nginx

Дополнительные параметры задавать не надо, потому что утилита сама прочитает конфигурацию и выведет список доступных доменов:

Введите цифру нужного домена или несколько цифр, разделённых запятой. Утилита сама установит всё, что нужно, а затем спросит вас, нужно ли перенаправлять http-трафик на https:

 

Затем утилита выдаст ту же информацию, что и в предыдущем варианте:

5. Обновление сертификата Let’s Encrypt

Чтобы выполнить обновление сертификата Let’s Encrypt, достаточно запустить команду certbot с опцией certonly. Учитывая, что сертификат находится в папке certbot, а конфигурация веб-сервера настроена именно на эту папку, то этой операции достаточно. Если же сертификаты копируются в другую папку, то вам понадобится скрипт для их автоматического копирования после обновления.

sudo certbot certonly -d test.losst.ru -d www.test.losst.ru

Если срок службы сертификата ещё не вышел и обновление не требуется, утилита спросит вас, действительно ли это надо сделать.

Если вы хотите обновлять сертификат в не интерактивном режиме, например с помощью скрипта, то нужно использовать опцию -n, также при использовании этой опции надо передать плагин, который будет использоваться для аутентификации:

sudo certbot certonly --nginx -n -d test.losst.ru -d www.test.losst.ru

Теперь можно добавить эту команду в планировщик cron, например раз в неделю:

crontab -e

0 0 * * 0 /usr/bin/certbot certonly --nginx -n -d test.losst.ru -d www.test.losst.ru

Если вы хотите обновить сертификаты для всех доменов одной командной в не интерактивном режиме, достаточно выполнить команду:

sudo certbot renew

6. Получение Wildcard сертификата Let’s Encrypt

Let’s Encrypt Wildcard-сертификаты появились относительно недавно. Они позволяют использовать один сертификат для всех поддоменов определённого домена, например *.test.losst.ru. Но и работает это всё сложнее — вам надо будет подтвердить, что этот домен принадлежит именно вам. Для этого надо добавить TXT-запись к зоне домена.

Вы можете сделать это вручную или же использовать dns-плагин для Certbot, чтобы добавить её автоматически. Правда, плагин поддерживается только для популярных сервисов, таких, как DigitalOcean, Linode, Cloudflare и так далее. В этой статье рассмотрим ручной вариант. Команда для генерации сертификата будет выглядеть вот так:

sudo certbot certonly --agree-tos -d test.losst.ru -d *.test.losst.ru --preferred-challenges dns --manual --server https://acme-v02.api.letsencrypt.org/directory

Вам надо будет разрешить публикацию вашего IP-адреса, а потом добавить TXT-запись с нужным именем и значением к вашей доменной зоне. В моем случае это  _acme-challenge.test.losst.ru со специальным хэшем:

Нужная TXT-запись в службе dmains.webmoney.ru выглядит вот так:

На обновление доменной зоны может уйти несколько часов, поэтому команду придётся выполнить ещё пару раз позже. После генерации сертификата вы можете использовать его как обычный сертификат для всех поддерживаемых доменов.

Выводы

В этой статье мы рассмотрели, как получить сертификат Let’s Encrypt с помощью клиента Certbot. Если у вас есть полный доступ к вашему серверу, то сделать это достаточно просто. Поэтому бесплатный сертификат Let’s Encrypt может получить каждый. На losst.ru тоже используются SSL-сертификаты от этого удостоверяющего центра, только создаются они с помощью автоматического скрипта панели управления Vesta. А для чего вы используете Let’s Encrypt? Напишите в комментариях!


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Оцените статью:

Загрузка…

Как настроить SSL используя Certbot и Let’s Encrypt :: 4devs

Если вы решили настроить HTTPS на ваших серверах, то думаю вам стоит воспользоваться Certbot, т.к. это простой и быстрый способ получения сертификатов.

Let’s Encrypt и Certbot

Let’s Encrypt — это бесплатный и автоматизированный (с помощью ACME протокола) центр сертификации, а Certbot — один из многих доступных клиентов, который сильно упрощает жизнь.

Установка Certbot

Мы используем CentOS 7 и на сайте Certbot уже есть необходимые команды для установки:


sudo yum install epel-release
sudo yum install certbot

У них также есть инструкции и для других операционных систем.

Получение SSL сертификата

Certbot имеет систему плагинов. Наиболее многообещающий из них — nginx, однако меня смущают некоторые моменты в документации:

Плагин Nginx является экспериментальным… Nginx Web Server — в настоящее время не работает

У нас есть ряд виртуальных серверов и мне не хотелось все испортить, поэтому я решил воспользоваться другим плагином, который также хорошо подходил — webroot.

Webroot плагин

Принцип работы данного плагина прост: указываем ему на главную/root папку веб сервера, он создает там папку .well-known и кладет туда необходимые для проверки файлы, после чего клиент со стороны Let’s Encrypt проверяет их и таким образом мы подверждаем права на указанный домен. Более детально процесс описан на сайте Let’s Encrypt.

Одним из главных преимуществ является то, что нет необходимости останавливать веб сервер. Вы также можете получить сертификат для множества доменов за один раз (так называемые SAN сертификаты). Ниже приведу пример необходимой для генерации сертификатов команды: 


certbot certonly --webroot -w /var/www/4devs/example.com/current/web -d example.com -w /var/www/4devs/example2.com/current/web -d sub1.example2.com -d sub2.example2.com

Здесь мы имеем следующие части:

certonly — при использовании данной команды Certbot лишь получит сертификаты, но не будет ничего делать с вашим веб сервером и устанавливать их;

--webroot — указываем необходимый нам плагин;

-w — флаг для указания главной веб директории сервера. Просто указываем путь;

-d — флаг для указания домена. Вы можете использовать несколько таких флагов после флага -w при условии, что они все имеют одну и ту же главную веб папку.

Все сгенерированные ключи и сертификаты будут находиться в /etc/letsencrypt/live/$domain. Если вы получаете сертификат для множества доменов за раз, то тогда на выходе получите только одну папку по имени первого из указанных доменов. В нашем примере это будет /etc/letsencrypt/live/example.com.

Настройка Nginx

Далее обновим конфигурацию виртуального сервера:


server {
    listen 443 ssl http2;
    server_name <ПЕРЕЧИСЛЕНИЕ ДОМЕНОВ ДЛЯ ИСПОЛЬЗУЕМОГО СЕРТИФИКАТА>;
    ssl_certificate <ПУТЬ К fullchain.pem ФАЙЛУ>;
    ssl_certificate_key <ПУТЬ К privkey.pem ФАЙЛУ>;
}

Не забудьте перезагрузить Nginx:


sudo nginx -s reload

Ограничения

У Let’s Encrypt есть свои ограничения, о которых следует знать. Наиболее существенным из них является то, что время жизни сертификатов от Let’s Encrypt составляет 90 дней. Вы ведь не хотите забыть их вовремя продлить? К счастью эту часть работы можно легко автоматизировать.

Автоматизация продления сертификатов

Решать проблему мы будем с помощью crontab, но сначала советую выполнить следующую команду


certbot renew --dry-run

под пользователем, под которым будете настраивать crontab, и убедиться, что все отработало нормально. Это необходимо сделать т.к. одна из потенциальных проблем — права на папки, с которыми работает certbot. Если проблем нет, то выполняем crontab -e и настраиваем продление сертификатов:


# Certbot: продление сертификатов
X */12 * * * certbot renew —quiet

Внимание: замените X значением от 0 до 59.

Certbot рекомендует запускать обновление чаще чем раз в 3 месяца. Задача выше будет запускаться дважды в день. Чтобы лучше понять crontab, воспользуйтесь Crontab Guru, который посоветовал @bfredit. Если ваши сертификаты будут свежими на момент запуска certbot, то он просто ничего не будет делать.

Выводы

Полная настройка заняла порядка 5 минут и была весьма приятной (думаю все любят когда всё работает быстро и с первого раза), поэтому я рекомендую вам опробовать данный подход.

linux_faq:lets_encrypt_certificates_on_ubuntu [wiki.autosys.tk]

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

После этого нужно запустить его и он установит нужные зависимости:

sudo ./certbot-auto

Теперь осталось положить этот скрипт куда-нибудь в систему, что потом выполнять его через cron для обновления сертификатов:

sudo cp ./certbot-auto /usr/local/bin/

При получении сертификата скрипт проверяет что мы управляем доменом, на который получаем серт. Для этого он создает на сервере проверочный файл и выдающий сертификат сервер запрашивает этот файл. Для того, чтобы все работало, на web-сервер должен быть сконфигурирован доступ к скрытой директории /.well-known/acme-challenge/.
В противном случае — скрипт постоянно ругается с ошибкой:

Failed authorization procedure. wiki.autosys.tk (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://wiki.autosys.tk/.well-known/acme-challenge/fsS43RbAQXN2s9rhftKocls_trASu5_7k4nz9kf8CTg

В nginx нужно закомментировать что-то такое:

location ~ /\. { deny all;
./certbot-auto certonly --webroot -w /var/www -d wiki.autosys.tk

Сертификаты попадают в папку /etc/letsencrypt/live/
Если доменов несколько, то команда будет такая:

./certbot-auto certonly --webroot -w /var/www -d wiki.autosys.tk -d anotherdomain.autosys.tk

Проверяем что все обновляется:

certbot-auto renew --dry-run

Обновляем все сертификаты:

certbot-auto renew

В секцию server сервера прописываем:

listen 443 ssl http2;
server_name  server.domain.ru;
ssl_certificate /etc/letsencrypt/live/pgadmin.adspeed.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pgadmin.adspeed.ru/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  

Тут важно, прописать fullchain.pem, а не cert.pem. Если прописать cert.pem, то не будет работать в некоторых браузерах, в частности — Chrome под Android

И включаем сервер HTTP на 80 порту, который понадобится для обновления сертификатов,а также для перенаправления клиентов, пришедших по HTTP на HTTPS:

server {
    listen        80;
    #server_name  server.domain.ru;
    root /var/www/;

    #Enable access to acme files
    location ~ /\.well-known/acme-challenge/ {
        allow all;
        access_log off;
        log_not_found off;
    }
    return 301 https://$host$request_uri;
}

Создаем файлик /etc/cron.weekly/certs_renew :

#! /bin/bash
# renew all lets_encrypt_certs

sed -i '/^\ *return 301 https/ s/^/#/' /etc/nginx/sites-enabled/default
service nginx reload

/usr/bin/certbot renew
sed -i '/^#\ *return 301 https/ s/^#//' /etc/nginx/sites-enabled/default 

service nginx reload

И делаем его исполняемым:

chmod a+x /etc/cron.weekly/certs_renew

Скрипт отключает перенаправление с HTTP на HTTPS, перезагружает конфигурацию nginx, обновляет сертификат, включает обратно перенаправление и снова перезагружает конфигурацию nginx.

Сертификат Let’s Encrypt и использование certbot ~ Knowledge Base

Сертификат от Let’s Encrypt можно получить с помощью certbot и использовать для сторонних сервисов, таких как Dovecot, Asterisk, Postfix, Exim

Дано



 

uname -a

Linux 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017

 



 

cat /etc/redhat-release

CentOS Linux release 7.4.1708 (Core)

 

[свернуть]

Установка certbot

Первое, что необходимо сделать



 

yum -y install yum-utils

yum-config-manager —enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional

 

Certbot есть в EPEL (дополнительные пакеты для корпоративного Linux). Чтобы использовать Certbot, вы должны сначала включить репозиторий EPEL. В RHEL или Oracle Linux вы также должны включить дополнительный канал.



 

rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

 

После чего устанавливаем bot

Плагины DNS Certbot также доступны для вашей системы, которые могут использоваться для автоматизации получения подстановочного сертификата с сервера ACMEv2 от Let’s Encrypt. Чтобы использовать один из этих плагинов, вы должны настроить DNS для домена, для которого вы хотите получить сертификат, с поставщиком DNS, для которого у Certbot есть плагин. Список этих плагинов и дополнительную информацию об их использовании можно найти здесь. Чтобы установить один из этих плагинов, запустите команду установки выше, но замените certbot именем плагина DNS, который вы хотите установить.

Получение сертификата

Поскольку ваша архитектура сервера еще не поддерживает автоматическую установку, вам нужно будет использовать команду certonly для получения вашего сертификата. Это позволит вам интерактивно выбирать плагин и параметры, используемые для получения вашего сертификата.

Если у вас уже есть веб-сервер, мы рекомендуем выбрать плагин webroot. Кроме того, вы можете указать дополнительную информацию в командной строке. Чтобы получить сертификат, используя плагин webroot, который может работать с каталогом webroot любого программного обеспечения веб-сервера:



 

certbot certonly —webroot -w /var/www/example -d example.com -d www.example.com -w /var/www/thing -d thing.is -d m.thing.is

 

Заметка:

Чтобы использовать плагин webroot, ваш сервер должен быть настроен на обслуживание файлов из скрытых каталогов. Если /.well -known обрабатывается специальной конфигурацией веб-сервера, вам может потребоваться изменить конфигурацию, чтобы гарантировать, что файлы внутри /.well-known/acme-challenge обрабатывались веб-сервером.

[свернуть]

Чтобы получить сертификат, используя встроенный «автономный» веб-сервер (вам может потребоваться временно остановить существующий веб-сервер, если таковой имеется) для example.com и www.example.com:



 

certbot certonly —standalone -d example.com -d www.example.com

 

Вы также можете использовать один из подключаемых модулей Certbot для получения сертификата, если он установлен, и вы настроили DNS для домена, для которого вы хотите получить сертификат, с поставщиком DNS, соответствующим плагину. Чтобы узнать больше об использовании этих плагинов, нажмите здесь. Если вы хотите использовать один из этих плагинов с новым ACMEv2-сервером Let’s Encrypt, который выдаст подстановочные сертификаты, вам также потребуется включить в командной строке следующий флаг:



 

—server https://acme-v02.api.letsencrypt.org/directory

 

Автоматическое обновление

Certbot может быть настроен на автоматическое обновление сертификатов до истечения срока их действия. Так как сертификаты Let’s Encrypt длятся в течение 90 дней, рекомендуется воспользоваться этой функцией. Вы можете протестировать автоматическое обновление сертификатов, выполнив следующую команду:



 

certbot renew —dry-run

 

Если это работает правильно, вы можете организовать автоматическое обновление, добавив задание cron или таймер systemd, который запускает следующее:

Заметка

если вы настраиваете работу cron или systemd, мы рекомендуем запускать задачу два раза в день (она ничего не сделает, пока ваши сертификаты не будут возвращены или отменены, но регулярное выполнение этого задания даст вашему сайту возможность оставаться в сети в случае, если по какой-то причине произошло аннулирование сертификата). Пожалуйста, выберите случайную минуту в течение часа для выполнения задач продления.

[свернуть]

Пример работы cron может выглядеть так, что будет работать в полдень и полночь каждый день:



 

0 0,12 * * * python -c ‘import random; import time; time.sleep(random.random() * 3600)’ &amp;&amp; certbot renew

 

Расположение сертификатов

Все сгенерированные ключи и выданные сертификаты можно найти в домене /etc/letencrypt/live/$domain. Вместо того, чтобы копировать, укажите конфигурацию сервера непосредственно на эти файлы (или создайте символические ссылки). Во время обновления, /etc/letencrypt/live обновляется последними полученными файлами. Каталог /etc/letsencrypt/archive и /etc/letsencrypt/keys содержат все предыдущие ключи и сертификаты, а /etc/letencrypt/live симлинки на последние, актуальные файлы

Доступны следующие файлы

privkey.pem – закрытый ключ сертификата

Внимание

Этот ключ нужно держать в секрете всегда! Никогда не сообщайте об этом никому, включая разработчиков Certbot. Однако вы не можете поместить его в сейф, ваш сервер все равно должен получить доступ к этому файлу, чтобы работать с SSL/TLS.

[свернуть]

Это то, что Apache требуется для SSLCertificateKeyFile и Nginx для ssl_certificate_key.

fullchain.pem – все сертификаты, включая сертификат сервера (сертификат aka leaf или сертификат конечного объекта). Сертификат сервера является первым в этом файле, за которым следуют любые промежуточные продукты. Это то, что Apache> = 2.4.8 требуется для SSLCertificateFile, и что нужно Nginx для ssl_certificate.

cert.pem и chain.pem (менее распространены) cert.pem содержит сертификат сервера сам по себе, а chain.pem содержит дополнительный промежуточный сертификат или сертификаты, которые понадобятся веб-браузерам для проверки сертификата сервера. Если вы поставите один из этих файлов на свой веб-сервер, вы должны предоставить оба из них, или некоторые браузеры будут показывать ошибки «Это соединение без доверия» для вашего сайта. Apache <2.4.8 нуждается в них для SSLCertificateFile. и SSLCertificateChainFile, соответственно. Если вы используете сшивание OCSP с Nginx> = 1.3.7, chain.pem следует предоставить как ssl_trusted_certificate для проверки ответов OCSP.

Дополнения

Команда renew включает в себя перехваты для запуска команд или скриптов до или после обновления сертификата. Например, если у вас есть один сертификат, полученный с помощью автономного плагина, вам может потребоваться остановить веб-сервер перед обновлением, поэтому необходимо остановить, а затем запустить веб-сервер после завершения работы плагина. Пример:



 

<span>certbot</span> <span>renew</span> <span>—</span><span>pre</span><span>-</span><span>hook</span> <span>»service nginx stop»</span> <span>—</span><span>post</span><span>-</span><span>hook</span> <span>»service nginx start»</span>

 

Команды pre-hook и post-hook запускаются до и после каждой попытки обновления. Если вы хотите, чтобы ваш скрипт запускался только после успешного обновления, используйте команду deploy-hook в такой команде.

Изменение файла конфигурации обновления

Когда сертификат выдается, по умолчанию Certbot создает файл конфигурации обновления, который отслеживает параметры, которые были выбраны при запуске Certbot. Это позволяет Certbot использовать те же самые параметры снова, когда приходит время для обновления. Эти файлы конфигурации обновления расположены по адресу



 

/etc/letsencrypt/renewal/CERTNAME

 

Внимание

Изменение любых файлов в файле / etc / letsencrypt может привести к их повреждению, поэтому Certbot больше не сможет правильно управлять своими сертификатами, и мы не рекомендуем это делать.

[свернуть]

Если вы хотите, чтобы файлы live-сертификатов, обновлялось при каждом прогоне, находилось в другом месте, сначала переместите их в это место, а затем укажите полный путь каждого из четырех файлов в файле конфигурации обновления.



 

<span lang=»ru»>certbot update_symlinks</span>

 

Например, скажем, что файл конфигурации обновления сертификата ранее содержал следующие директивы:


 

<span>archive_dir</span> <span>=</span> <span>/</span><span>etc</span><span>/</span><span>letsencrypt</span><span>/</span><span>archive</span><span>/</span><span>example</span><span>.</span><span>com</span>

<span>cert</span> <span>=</span> <span>/</span><span>etc</span><span>/</span><span>letsencrypt</span><span>/</span><span>live</span><span>/</span><span>example</span><span>.</span><span>com</span><span>/</span><span>cert</span><span>.</span><span>pem</span>

<span>privkey</span> <span>=</span> <span>/</span><span>etc</span><span>/</span><span>letsencrypt</span><span>/</span><span>live</span><span>/</span><span>example</span><span>.</span><span>com</span><span>/</span><span>privkey</span><span>.</span><span>pem</span>

<span>chain</span> <span class=

Как настроить автоматическое продление для SSL-сертификатов Let’s Encrypt (Apache) — One Page Zen

Знаете ли вы, что вы можете быстро настроить сертификаты Let’s Encrypt для автоматического обновления, выполнив простой скрипт автоматического обновления letsencrypt?

Настройка автоматического продления SSL-сертификатов Let’s Encrypt означает, что на вашем веб-сайте всегда будет действующий SSL-сертификат.

В этом руководстве для начинающих вы узнаете, как настроить SSL-сертификаты Let’s Encrypt для автоматического обновления до истечения срока их действия.

Перед тем, как приступить к изучению этого руководства, вы должны уже настроить SSL-сертификаты Let’s Encrypt для сервера Apache в вычислительной машине Google Cloud.

Если вы еще не настроили SSL для своего веб-сайта, вот руководство для конфигураций серверов Click-to-deploy (стандартный Apache) и Bitnami (пользовательский Apache).

В этом руководстве 6 шагов:

Для тех из вас, кто настраивал SSL с помощью руководств Click-to-deploy и Bitnami SSL, ваш пакет certbot-auto был загружен в ваш домашний каталог.Вы можете просмотреть пакет, просто выполнив команду ls.

Для пользователей, которые следовали руководствам Click-to-deploy или Bitnami SSL, вы можете просмотреть свой пакет certbot-auto, выполнив команду ls. Видеть это? Теперь переходите к шагу 2.

Тем из вас, кто загрузил пакет certbot-auto в другой каталог, важно его найти. Если вы не можете найти пакет certbot-auto, вы можете повторно загрузить его, выполнив следующую команду:

  wget https: // dl.eff.org/certbot-auto && chmod a + x certbot-auto  

Если вам необходимо повторно загрузить пакет certbot-auto, вы можете убедиться, что он установлен правильно, выполнив команду ls для просмотра пакета.

После того, как вы установили местонахождение вашего пакета Cerbot-Auto, следующим шагом будет перемещение пакета certbot-auto в каталог / etc / letsencrypt /.

Итак, для пользователей, которые следовали либо из вышеупомянутых обучающих программ Click-to-deploy или Bitnami, ваша команда будет:

  судо мв certbot-auto / etc / letsencrypt /  

Используйте команду mv, чтобы переместить пакет certbot в каталог letsencrypt.Вы можете убедиться, что ваш пакет certbot-auto был успешно перемещен, выполнив команду ls / etc / letsencrypt / и посмотрев, отображается ли пакет certbot-auto в этом каталоге.

Теперь, когда вы переместили пакет certbot-Auto в каталог / etc / letsencrypt /, следующим шагом будет открытие файла crontab.

Чтобы открыть файл crontab, выполните следующую команду:

  судо crontab -e  

Вы можете открыть файл crontab, выполнив команду sudo crontab -e.

Теперь, когда вы открыли файл crontab, следующим шагом будет добавление скрипта в конец файла crontab, который будет выполняться раз в неделю и автоматически обновлять сертификаты SSL, если срок их действия скоро истечет.

Внизу файла crontab вы введете сценарий, который сообщит вашему серверу, что он должен проверять обновления сертификатов один раз в неделю и автоматически обновлять сертификаты, если срок их действия скоро истечет. Чтобы сохранить изменения, нажмите CTRL + X, затем CTRL + Y, затем Enter.

Для пользователей Apache с развертыванием нажми и стандартными добавьте следующий сценарий:

  45 2 * * 6 cd / etc / letsencrypt / && ./certbot-auto обновить && /etc/init.d/apache2 restart  

Для пользователей Bitnami добавьте следующий скрипт:

  45 2 * * 6 cd / etc / letsencrypt / && ./certbot-auto обновить && /opt/bitnami/ctlscript.sh перезапустить  

Чтобы проверить сценарий автоматического обновления на наличие ошибок, вы можете быстро выполнить «пробный запуск» — процесс, в котором сценарий автоматического обновления будет выполняться без фактического обновления сертификатов.Чтобы выполнить «пробный прогон», выполните следующие две команды:

Для пользователей Apache с развертыванием по нажатию или стандартного:

  судо -i
cd / etc / letsencrypt / && ./certbot-auto обновить --dry-run && /etc/init.d/apache2 restart  

Для пользователей Bitnami:

  судо -i
cd / etc / letsencrypt / && ./certbot-auto обновить --dry-run && /opt/bitnami/ctlscript.sh restart  

Поздравляем! Вы успешно настроили свои SSL-сертификаты Let’s Encrypt на автоматическое продление до истечения срока их действия.

Если вы хотите протестировать процесс продления, перейдите к следующему шагу (необязательно). Поскольку сценарий обновит сертификаты за месяц до истечения срока их действия, вы можете использовать SSL Checker, чтобы проверить, успешно ли обновлены сертификаты.

Расширенное тестирование (дополнительно)

В этом разделе руководства по расширенному тестированию вы узнаете, как использовать команду —force-Renew для имитации обновления сертификата в реальной среде.

Для начала проверьте текущую дату и время на вашей виртуальной машине.Для этого выполните команду date.

Проверьте текущее время на своем сервере, выполнив команду date.

Запишите дату и время — либо вставьте их в Блокнот, либо запишите на листе бумаги. Основываясь на примере выше, я бы записал 18:56:54

6.1 Проверить текущий срок годности

Теперь, когда вы зарегистрировали текущую дату и время вашей системы, следующим шагом будет проверка срока действия вашего сертификата. Для этого выполните следующую команду:

  openssl x509 -noout -dates -in / etc / letsencrypt / live / example.com / cert.pem  

Примечание: Не забудьте заменить example.com своим собственным доменным именем.

Предварительная проверка даты истечения срока действия SSL-сертификата позволит вам проверить, правильно ли работает сценарий автоматического обновления.

Запишите дату и время выдачи сертификата — либо вставьте его в блокнот, либо запишите на листе бумаги.

Исходя из приведенного выше примера, я бы записал 13:34:41

6.2 Принудительный скрипт Crontab

Выполните команду sudo crontab -e, чтобы повторно открыть файл crontab.

В этом примере отметка даты и времени моей виртуальной машины показала 18:56:54. Итак, я бы хотел, чтобы сценарий автоматического обновления выполнялся за несколько минут до 18:56:54 в 18:59:00.

Чтобы протестировать сценарий автоматического обновления, вам необходимо временно изменить время сценария и команду возобновления. Цифры под буквами m и h представляют время (минуты и часы), когда вы хотите, чтобы сценарий выполнялся (18:59:00 на изображении выше).

Для пользователей Apache с развертыванием по нажатию или стандартного:

  59 18 * * * cd / etc / letsencrypt / &&./ certbot-auto Renew --force-Renew && /etc/init.d/apache2 restart  

Для пользователей Bitnami:

  59 18 * * * cd / etc / letsencrypt / && ./certbot-auto Renew --force-Renew && /opt/bitnami/ctlscript.sh restart  

По истечении времени, указанного в начале сценария (18:59 в этом примере), проверьте системный журнал, чтобы убедиться, что сценарий выполнен успешно.

Чтобы проверить системный журнал, перейдите в каталог журнала, выполнив cd / var / log /.

Перейдя в / var / log /, вы получите доступ к системным журналам Apache.

Затем распечатайте системный журнал на экране, выполнив команду cat syslog.

Если ваш тест прошел успешно, вы заметите, что скрипт crontab появляется в ваших системных журналах Apache, показывая, успешно ли был выполнен скрипт.

6.3 Проверить успешность обновления

Чтобы проверить, было ли обновление успешным, вернитесь в свой домашний каталог, выполнив cd, затем выполните следующую команду, убедившись, что заменили example.com с вашим собственным доменным именем.

  openssl x509 -noout -dates -in /etc/letsencrypt/live/example.com/cert.pem  

После выполнения сценария автоматического обновления certbot вы должны заметить, что даты истечения срока действия вашего SSL-сертификата изменились и переместились на 3 месяца в будущем.

Также рекомендуется дважды проверить с помощью онлайн-средства проверки сертификатов SSL, чтобы убедиться, что ваши обновленные сертификаты распознаются.

6.4 Восстановить скрипт crontab по умолчанию

Теперь, когда тестирование завершено, не забудьте вернуть скрипт crontab к значениям по умолчанию из шага 4 этого руководства!

Исходный сценарий crontab настроен на выполнение каждую субботу в 2:45.

Теперь, когда вы настроили автоматическое продление для своих SSL-сертификатов Let’s Encrypt, вам больше не придется беспокоиться об их продлении!

Если у вас есть какие-либо вопросы или комментарии по этому руководству, разместите их ниже.

Спасибо,

Управляйте файлами на Google Cloud Platform.

Как создать и автоматически продлить сертификат Let’s Encrypt Wildcard?

Как вы знаете, Let’s Encrypt официально приступила к выдаче подстановочных SSL-сертификатов с использованием конечной точки ACMEv2 (Automated Certificate Management Environment). Подстановочные сертификаты позволяют защитить все поддомены домена с помощью одного сертификата. В некоторых случаях подстановочные сертификаты могут упростить управление сертификатами.

Сертификаты

Wildcard доступны только через ACMEv2. Кроме того, домены с подстановочными знаками должны быть проверены с использованием типа запроса DNS-01.Это означает, что вам необходимо изменить записи DNS TXT, чтобы подтвердить право собственности на домен с целью получения подстановочного сертификата. Вы можете прочитать больше здесь. Есть несколько клиентов для взаимодействия с этим API, но разные клиенты служат для разных целей. Мы будем использовать certbot. Итак, приступим —

1. Установите certbot

Чтобы установить certbot, выполните следующие команды:

  wget https://dl.eff.org/certbot-auto
chmod a + x./ certbot-auto
sudo ./certbot-auto
  

Если sudo ./certbot-auto возвращает ошибку примерно так —

  Создание виртуальной среды ...
...
OSError: команда /opt/eff.org/certbot/venv/bin/python2.7 - setuptools pkg_resources pip wheel не удалось с кодом ошибки 1
  

, тогда вам необходимо установить локальные переменные LC_ALL и LC_CTYPE на en_US.UTF-8

  экспорт LC_ALL = "en_US.UTF-8"
экспорт LC_CTYPE = "en_US.UTF-8 "
  

2. Создание и настройка подстановочного сертификата (ручной режим)

Мы говорим об этом ручном режиме, потому что в этом случае нам нужно выполнить задачи для проверки владения доменом вручную (если вы хотите автоматизировать процесс проверки, перейдите к шагу 3). Здесь мы собираемся создать подстановочный сертификат для developerinsider.co и настроить их на сервере nginx . Здесь вы можете заменить nginx на apache , если вы используете сервер apache .Если вы хотите создать только сертификат, замените -i nginx на certonly .

  sudo ./certbot-auto -i nginx --server https://acme-v02.api.letsencrypt.org/directory --manual --preferred-issues dns -d * .developerinsider.co -d developerinsider.co
  

Клиент certbot проведет вас через процесс регистрации учетной записи и проинструктирует вас, что делать для выполнения задач. Вы должны увидеть что-то вроде:

  Разверните запись DNS TXT под именем
_acme-challenge.developerinsider.co со следующим значением:

nYng6cq_RLTU5eN0XXXXXXXXXXXXanNS8EqGtkVh8

Прежде чем продолжить, убедитесь, что запись развернута.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Нажмите Enter, чтобы продолжить
  

Вы можете развернуть эту запись DNS TXT с помощью панели управления доменом. После того, как вы завершили развертывание записи TXT, вам необходимо убедиться, что она работает, используя nslookup:

  nslookup -type = TXT _acme-challenge.developerinsider.co
Сервер: 192.XXX.XXX.XXX
Адрес: 192.XXX.XXX.XXX # XX

Неавторитетный ответ:
_acme-challenge.developerinsider.co text = "nYng6cq_RLTU5eN0XXXXXXXXXXXXXanNS8EqGtkVh8"
  

Когда вы убедились, что запись TXT правильно развернута и доступна с помощью команды nslookup , переходите к следующему испытанию.

Если на вашем сервере nginx задействовано несколько сайтов, вам необходимо выбрать сайт вручную. В моем случае я хочу обновить оба файла конфигурации сайта.Итак, я оставляю поле ввода пустым, чтобы выбрать все параметры.

  Какие серверные блоки вы хотите изменить?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Файл: /etc/nginx/sites-enabled/developerinsider.co.conf
Адреса: 443 ssl, [::]: 443 ssl
Имена: developerinsider.co
HTTPS: Да

2: Файл: /etc/nginx/sites-enabled/tech.developerinsider.co.conf
Адреса: 443 ssl, [::]: 443 ssl
Имена: tech.developerinsider.co
HTTPS: Да
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Выберите соответствующие числа, разделенные запятыми и / или пробелами, или оставьте поле ввода
пусто, чтобы выбрать все показанные параметры (для отмены введите 'c'):
  

После этого клиент certbot спросит вас, хотите ли вы перенаправить HTTP-трафик на HTTPS.Здесь вы можете выбрать подходящий вариант для вашего сайта. Лично я хочу перенаправить весь HTTP-трафик на HTTPS. Итак, выбираю вариант 2.

  Выберите, следует ли перенаправлять HTTP-трафик на HTTPS, удаляя HTTP-доступ.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Без перенаправления - больше не вносите изменений в конфигурацию веб-сервера.
2: Перенаправление - сделайте все запросы перенаправленными для безопасного доступа HTTPS. Выберите это для
новые сайты, или если вы уверены, что ваш сайт работает по HTTPS.Вы можете отменить это
изменить, отредактировав конфигурацию вашего веб-сервера.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Выберите соответствующий номер [1-2], затем [введите] (нажмите 'c' для отмены): 2
  

Когда сертификат будет выдан и вы должны увидеть что-то вроде:

  ВАЖНЫЕ ПРИМЕЧАНИЯ:
 - Поздравляю! Ваш сертификат и цепочка сохранены по адресу:
   /etc/letsencrypt/live/developerinsider.co/fullchain.pem
   Ваш ключевой файл сохранен по адресу:
   / и т.д. / letsencrypt / live / developerinsider.co / privkey.pem
   Срок действия вашего сертификата истечет 9 декабря 2018 г. Чтобы получить новый или измененный
   версия этого сертификата в будущем, просто запустите certbot-auto
   еще раз. Чтобы обновить * все * сертификаты в неинтерактивном режиме, запустите
   "certbot-auto продлить"
 - Учетные данные вашей учетной записи были сохранены в вашем Certbot
   каталог конфигурации в / etc / letsencrypt. Вы должны сделать
   безопасное резервное копирование этой папки сейчас. Этот каталог конфигурации будет
   также содержат сертификаты и закрытые ключи, полученные Certbot, поэтому
   делать регулярные резервные копии этой папки идеально.- Если вам нравится Certbot, рассмотрите возможность поддержки нашей работы:

   Пожертвование ISRG / Let's Encrypt: https://letsencrypt.org/donate
   Пожертвование в EFF: https://eff.org/donate-le
  

3. Создание и настройка подстановочного сертификата (автоматический режим)

Если вы хотите получить подстановочный сертификат без ручного выполнения задач AMEC, вам необходимо использовать один из подключаемых модулей Certbot DNS.

3.1 Получить ключ API

Плагину требуется файл конфигурации, содержащий учетные данные API, полученный ключ API из вашей учетной записи менеджера DNS —

  1. Cloudfare — certbot-dns-cloudflare
  2. Cloudxns — certbot-dns-cloudxns
  3. DigitalOcean — certbot-dns-digitalocean
  4. DNSimple — certbot-dns-dnsimple
  5. DNSMadeEasy — certbot-dns-dnsmadeeasy
  6. Google — certbot-dns-google
  7. Линод — certbot-dns-linode
  8. LuaDNS — certbot-dns-luadns
  9. NSOne — certbot-dns-nsone
  10. OVH — certbot-dns-ovh
  11. RFC2136 — certbot-dns-rfc2136
  12. Route53 — certbot-dns-route53

Теперь создайте каталог .секреты и сохраните файл учетных данных. Выше ссылки содержат пример файла учетных данных. Вот пример Digital Ocean —

  мкдир. Секреты
cd .secrets
нано digitalocean.ini
  

Скопируйте и вставьте учетные данные и сохраните файл.

  # Учетные данные API DigitalOcean, используемые Certbot
dns_digitalocean_token = 0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff
  

Теперь запустите chmod 600 , чтобы ограничить доступ к файлу.

3.2 Установка подключаемого модуля Certbot DNS

Чтобы установить плагин DNS, сначала вам нужно определить, где установлен ваш certbot:

  find / -name certbot
/opt/eff.org/certbot
  

Теперь войдите в Virtual Env и установите плагин для вашего DNS-менеджера (в моем случае Digital Ocean)

  компакт-диск /opt/eff.org/certbot/venv
исходный бункер / активировать
pip install certbot-dns-digitalocean
деактивировать
  

Убедитесь, что плагины certbot установлены или нет

  Плагины certbot-auto
  
  Сохранение журнала отладки в / var / log / letsencrypt / letsencrypt.журнал

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* apache
Описание: Плагин Apache Web Server - бета
Интерфейсы: IAuthenticator, IInstaller, IPlugin
Точка входа: apache = certbot_apache.entrypoint: ENTRYPOINT

* certbot-dns-digitalocean
Описание: получить сертификаты с помощью записи DNS TXT (если вы используете Digital Ocean для DNS).
Интерфейсы: IAuthenticator, IPlugin
Точка входа: dns-digitalocean = certbot-dns-digitalocean.dns-digitalocean: Authenticator

* nginx
Описание: плагин Nginx Web Server
Интерфейсы: IAuthenticator, IInstaller, IPlugin
Точка входа: nginx = certbot_nginx.конфигуратор: NginxConfigurator

* автономный
Описание: Создание временного веб-сервера
Интерфейсы: IAuthenticator, IPlugin
Точка входа: standalone = certbot.plugins.standalone: ​​Authenticator

* webroot
Описание: Поместить файлы в корневой каталог.
Интерфейсы: IAuthenticator, IPlugin
Точка входа: webroot = certbot.plugins.webroot: Authenticator
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  
3.3 Создание и настройка подстановочного сертификата

Здесь мы собираемся создать групповой сертификат для developerinsider.co и настройте их на сервере nginx . Здесь вы можете заменить nginx на apache , если вы используете сервер apache . Если вы хотите создать только сертификат, замените -i nginx на certonly .

  ./certbot-auto -i nginx --server https://acme-v02.api.letsencrypt.org/directory --preferred-issues dns -d '* .developerinsider.co' -d 'developerinsider.co' --dns-digitalocean --dns-digitalocean-credentials.секреты / digitalocean.ini
  

Если на вашем сервере nginx задействовано несколько сайтов, вам необходимо выбрать сайт вручную. В моем случае я хочу обновить оба файла конфигурации сайта. Итак, я оставляю поле ввода пустым, чтобы выбрать все параметры.

  Какие серверные блоки вы хотите изменить?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Файл: /etc/nginx/sites-enabled/developerinsider.co.conf
Адреса: 443 ssl, [::]: 443 ssl
Имена: developerinsider.co
HTTPS: Да

2: Файл: /etc/nginx/sites-enabled/tech.developerinsider.co.conf
Адреса: 443 ssl, [::]: 443 ssl
Имена: tech.developerinsider.co
HTTPS: Да
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Выберите соответствующие числа, разделенные запятыми и / или пробелами, или оставьте поле ввода
пусто, чтобы выбрать все показанные параметры (для отмены введите 'c'):
  

После этого клиент certbot спросит вас, хотите ли вы перенаправить HTTP-трафик на HTTPS. Здесь вы можете выбрать, какой из них лучше подходит для вашего сайта.Лично я хочу перенаправить весь HTTP-трафик на HTTPS. Итак, выбираю вариант 2.

  Выберите, следует ли перенаправлять HTTP-трафик на HTTPS, удаляя HTTP-доступ.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Без перенаправления - больше не вносите изменений в конфигурацию веб-сервера.
2: Перенаправление - сделайте все запросы перенаправленными для безопасного доступа HTTPS. Выберите это для
новые сайты, или если вы уверены, что ваш сайт работает по HTTPS. Вы можете отменить это
изменить, отредактировав конфигурацию вашего веб-сервера.- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Выберите соответствующий номер [1-2], затем [введите] (нажмите 'c' для отмены): 2
  

Когда сертификат будет выдан и вы должны увидеть что-то вроде:

  ВАЖНЫЕ ПРИМЕЧАНИЯ:
 - Поздравляю! Ваш сертификат и цепочка сохранены по адресу:
   /etc/letsencrypt/live/developerinsider.co/fullchain.pem
   Ваш ключевой файл сохранен по адресу:
   /etc/letsencrypt/live/developerinsider.co/privkey.pem
   Срок действия вашего сертификата истечет 9 декабря 2018 г. Чтобы получить новый или измененный
   версия этого сертификата в будущем, просто запустите certbot-auto
   еще раз. Чтобы обновить * все * сертификаты в неинтерактивном режиме, запустите
   "certbot-auto продлить"
 - Учетные данные вашей учетной записи были сохранены в вашем Certbot
   каталог конфигурации в / etc / letsencrypt. Вы должны сделать
   безопасное резервное копирование этой папки сейчас. Этот каталог конфигурации будет
   также содержат сертификаты и закрытые ключи, полученные Certbot, поэтому
   делать регулярные резервные копии этой папки идеально.- Если вам нравится Certbot, рассмотрите возможность поддержки нашей работы:

   Пожертвование ISRG / Let's Encrypt: https://letsencrypt.org/donate
   Пожертвование в EFF: https://eff.org/donate-le
  

4. Автоматизация продления

Если вы создали групповой сертификат в ручном режиме, вам нужно повторять этот шаг каждый раз, когда вы хотите обновить свой групповой сертификат. Но в автоматическом режиме вы можете автоматически обновлять подстановочный сертификат с помощью задания cron. В пакетах Certbot уже есть задание cron, которое автоматически обновит ваши сертификаты до истечения срока их действия.Поскольку срок действия сертификатов Let’s Encrypt составляет 90 дней, настоятельно рекомендуется воспользоваться этой функцией. Вы можете протестировать автоматическое продление своих сертификатов, выполнив эту команду:

  ./certbot-auto обновить --dry-run
  

Если вы уверены, что эта команда успешно выполняется без вмешательства человека, вы можете добавить команду в crontab без флага --dry-run . Сертификаты Let’s Encrypt обновляются только тогда, когда срок их действия близок к истечению, команда может выполняться регулярно, например, каждую неделю или каждый день.Вы также можете добавить к этой команде pre-hook и post-hook. Нравится —

  ./certbot-auto обновить --pre-hook "service nginx stop" --post-hook "service nginx start"
  

или

  ./certbot-auto Renew --post-hook "перезапуск службы nginx"
  

Подробнее читайте в документации по certbot.

.

Как автоматически обновлять сертификаты Let’s Encrypt

Если вы когда-либо устанавливали бесплатные ssl-сертификаты, предоставленные Let’s encrypt для вашего сайта, то крайне важно автоматически обновлять сертификаты, иначе посетители будут встречены с неприятной ошибкой исключения безопасности ssl. SSL-сертификаты Let’s encrypt истекут через 90 дней установки, и вы должны обновить его до истечения срока его действия. Если вы установили сертификаты с помощью certbot, тогда он должен уже создать cronjob для автоматического обновления сертификатов.Для выборочной установки вы также можете создать аналогичное задание cron. Давайте узнаем, как работает автоматическое продление certbot.

Certbot Renew Command

Certbot поставляется со сценарием для обновления существующих сертификатов. Вы можете протестировать сценарий обновления с помощью одного пробного запуска, как показано ниже.

  $ sudo certbot Renew --dry-run  

Если вышеуказанный тест прошел успешно, создайте задание cron, которое будет запускать этот скрипт в течение заданных интервалов.

Certbot Auto Renew Cron Job

Когда вы устанавливаете сертификаты с помощью certbot, он автоматически создает задание cron для обновления сертификатов.Вы можете проверить это задание cron в зависимости от вашей операционной системы. Например, в Debian cronjob certbot автоматическое обновление можно найти по адресу /etc/cron.d/certbot . Вы можете обратиться к документации certbot, чтобы проверить расположение задания cron для вашей операционной системы. Этот cronjob содержит следующий код.

  $ cat /etc/cron.d/certbot

# /etc/cron.d/certbot: записи crontab для пакета certbot
#
# Upstream рекомендует пытаться продлить дважды в день
#
# В конце концов, это будет возможность проверить сертификаты
# не были отозваны и т. д.Продление произойдет только по истечении срока
# в течение 30 дней.
ОБОЛОЧКА = / bin / sh
ПУТЬ = / usr / local / sbin: / usr / local / bin: / sbin: / bin: / usr / sbin: / usr / bin

0 * / 12 * * * корневой тест -x / usr / bin / certbot -a \! -d / run / systemd / system && perl -e 'sleep int (rand (43200))' && certbot -q обновить
  
Как работает скрипт автоматического продления Certbot?

Это задание cron будет запускаться дважды в день для обновления сертификата. Строка certbot -q Renew будет проверять, истекает ли срок действия сертификата через следующие 30 дней или нет.Если срок его действия истекает, он автоматически обновит его , незаметно , не генерируя выход . Если срок действия сертификата не истек, не будет выполнять никаких действий . При обновлении сертификата он будет использовать ту же информацию, что и при создании сертификата, такую ​​как адрес электронной почты , имя домена, корневой путь веб-сервера и т. Д.

.

позволяет зашифровать — Как продлить только один домен с помощью certbot?

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

Загрузка…

  1. Авторизоваться
    зарегистрироваться

  2. текущее сообщество

    .

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *