Главная >> Инструкции >> Как получить сертификат Let's 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.pro -d test.losst.pro -d www.test.losst.pro

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

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

Во время генерации сертификата утилита спросит ваш 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.pro -d www.test.losst.pro

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

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

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

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

crontab -e

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

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

sudo certbot renew

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

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

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

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

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

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

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

Выводы

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

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

15 комментариев к “Как получить сертификат Let's Encrypt”

  1. Доброго времени суток! Подскажите плиз. Порты 80 и 443 открыты, через сервис 2ip прослушиваются. http://мой_домен.ru:80 и https://мой_домен.ru:443 я попадаю в одно и то же место - панель управления IP-телефонией и почтовиком. Почему certbot ругается "
    Unable to find a virtual host listening on port 80 which is currently needed for Certbot to prove to the CA that you control your domain. Please add a virtual host for port 80"

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

      Ответить
  2. Не понимаю как это работает.
    Раньше когда раз в три месяца можно было обновлять сертификат Wildcard я прописывал 2 TXT записи в доменной зоне, и получал сертификат, без проблем.
    с этой же утилитой бьюсь уже пару часов.
    Она выдает мне два ключа последовательно
    я последовательно прописываю их в _acme-challenge.мойсайт.ru
    производится проверка, и каждый раз выдает
    - The following errors were reported by the server:

    Domain: medsoftservice.ru
    Type: unauthorized
    Detail: Incorrect TXT record
    "m3g4Gu5.....QslOE" (and 3 more) found at
    _acme-challenge.мойсайт.ru

    Domain: medsoftservice.ru
    Type: unauthorized
    Detail: Incorrect TXT record
    "mCPNR....YzmsIA" (and 3 more) found at
    _acme-challenge.мойсайт.ru

    To fix these errors, please make sure that your domain name was
    entered correctly and the DNS A/AAAA record(s) for that domain
    contain(s) the right IP address.

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

    Ответить
  3. модератор, просьба удалить из моего комментария доменное имя

    В ситуации я разобрался и могу сказать где твоя инструкция не правильна.
    Вот это предложение "На обновление доменной зоны может уйти несколько часов, поэтому команду придётся выполнить ещё пару раз позже." необходимо удалить, т.к. оно вводит в заблуждение.
    НЕЛЬЗЯ выполнять команду несколько раз. Т.к. каждый раз генерируются совершенно другие ключи для прописывания в доменной зоне.
    После того как был отображен второй ключ, его нужно прописать его в доменную зону, и при этом ни в коем случае сразу не нажимать Enter
    Надо подождать и проверить разошлись ли записи по DNS серверам.
    например командой
    nslookup -type=txt _acme-challenge.вашдомен.ru 8.8.8.8
    Делать это придется несколько раз, через минут 5-10 пока запрос не вернет записи.
    И только после того как запрос вернет ваши TXT записи. Можно нажимать Enter (после ввода второго ключа)

    Ответить
  4. А как поставить идиотский сертификат
    если хостер не предоставляет полного доступа по SSH к серверу?
    ну не положено и все типа делай через DirectAdmin.
    нет там никакой консоли хотя сервера скорее всего на линукс у джастхоста.

    Ответить
    • В DirectAdmin есть встроенный плагин для получения LetsEncrypt сертификатов. Эта инструкция для VPS, на хостингах такое работать не будет и не должно.

      Ответить
  5. Certbot нужно установить на сервере? или можно генерировать ssl сертификаты в любом компьютере без сервера?

    Ответить

Оставьте комментарий