🐹 CentOS 7: Настройка бесплатного ssl-сертификата Let’s Encrypt.

Содержание:

1. Что это такое.
2. Как он работает.
3. Основные преимущества.
4. О его недостатках.
5. Установка утилиты certbot.
6. Получение бесплатного ssl-сертификата.
7. Автоматическое обновление ssl-сертификата.
8. Оригиналы источников информации.


1. Что это такое.

Let’s Encrypt — бесплатный, автоматизированный и открытый Центр Сертификации, созданный на благо всего общества организацией Internet Security Research Group (ISRG).

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

Ключевые принципы Let’s Encrypt:

  • Бесплатность: Любой владелец домена может использовать Let’s Encrypt для получения SSL/TLS сертификатов, не тратя ни копейки.
  • Автоматизированность: Программное обеспечение Let’s Encrypt, запущенное на web-сервере, само позаботится о выпуске, настройке и обновлении сертификатов.
  • Безопасность: Let’s Encrypt будет платформой для передовых технологии в области TLS безопасности, как для Центра Сертификации, так и для web-серверов.
  • Прозрачность: Все выданные или отозванные сертификаты будут сохранены, в том числе и для любых проверок безопасности.
  • Открытость: Протокол выпуска и обновления сертификатов будет опубликован как открытый стандарт, готовый ко внедрению.
  • Взаимодействие: Как и сами протоколы по обмену данными, лежащие в его основе, Let’s Encrypt — это результат объединённых усилий сообщества, без диктата какой-либо одной организации.

2. Как он работает.

Let’s Encrypt и протокол ACME решают проблему автоматической настройки HTTPS на сервере, когда SSL / TLS сертификаты выдаются и обновляются без участия человека. Таким решением стал специальный сервис — агент по управлению сертификатами — работающий на web-сервере.

Для понимания технологии, разберём настройку домена https://example.com/ агентом сертификатов Let’s Encrypt, состоящую из двух этапов.

На первом этапе агент уведомляет Центр Сертификации о правах администратора сервера на доменное имя. На втором этапе, после подтверждения прав на домен, агент может запрашивать, обновлять и отзывать сертификаты.

2.1. Проверка домена.

Let’s Encrypt идентифицирует web-сервер с запущенным агентом по открытому ключу. Открытый и закрытый ключи генерируются агентом перед первым подключением к Центру сертификации Let’s Encrypt. После подключения агента к Центру Сертификации, создаётся аккаунт администратора сервера. В созданный аккаунт добавляются доменные имена, которыми владеет администратор, аналогично тому, как это происходит в платных Центрах Сертификации.

Есть несколько способов проверить права на домен. Для каждого варианта Центр Сертификации Let’s Encrypt подготавливает серию тестов. Например, перед проверкой прав на домен example.com, Центр Сертификации Let’s Encrypt может предложить агенту на выбор:

  • Предоставить DNS-запись для поддомена внутри https://example.com, или
  • Предоставить HTTP-ресурс с определённым URI внутри http://example.com/

Одновременно с тестированием прав администратора на домен, Let’s Encrypt проверяет права агента на открытый и закрытый ключи. Let’s Encrypt отправляет агенту одноразовый пароль, который агент должен подписать закрытым ключом и отослать обратно.

Агент пытается выполнить серию тестов для проверки прав на домен. Допустим, успешно выполнено задание по созданию HTTP-ресурса — создан файл по определённому пути внутри http://example.com. Кроме того, агентом получен одноразовый пароль, который был подписан закрытым ключом и отправлен обратно в Let’s Encrypt. Как только эти пункты выполнены — агент уведомляет Центр Сертификации о завершении проверки.

Далее, Центр Сертификации проверяет, всё ли было сделано верно: корректную цифровую подпись на одноразовом пароле, возможность скачать созданный файл по URI, а также его содержимое.

Если цифровая подпись верна, и все тесты пройдены — агенту выдаются права на управление сертификатами для домена example.com. Ключевая пара (открытый и закрытый ключи), используемая при проверке прав на домен, называется “авторизованной ключевой парой” для example.com.

2.2. Выпуск и отзыв сертификатов.

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

Для получения сертификата для example.com, агент составляет запрос в Центр сертификации Let’s Encrypt согласно Certificate Signing Request. Обычно, CSR содержит цифровую подпись закрытого ключа, соответствующий ему открытый ключ, а также подписывается целиком авторизованной ключевой парой.

При получении CSR, Центр сертификации Let’s Encrypt проверяет подписи ключевой пары. Если всё в порядке, Центр Сертификации выпускает сертификат для example.com с открытым ключом из CSR, и отправляет его агенту.

Отзыв сертификата происходит аналогично. Агент подписывает запрос об отзыве ключевой парой, авторизованной для example.com. Как только Центр сертификации Let’s Encrypt подтверждает цифровые подписи запроса, он публикует информацию об отзыве сертификата, используя OSCP. Таким образом браузеры, полагаясь на данные из OSCP, не будут принимать отозванные сертификаты.

3. Основные преимущества.

  • бесплатно: любой владелец сайта (в частности, доменного имени) может получить и установить доверенный TLS-сертификат Let’s Encrypt (TLS — наследник SSL);
  • автоматизация: все функции установки, конфигурации и обновления проводятся в автоматическом режиме;
  • безопасность: все методы шифрования Let’s Encrypt отвечают текущим стандартам;
  • прозрачность: публичная доступность информации о выпуске и отзыве каждого сертификата для любого желающего;
  • свободно: будет использован принцип Open Standard для протоколов взаимодействия с CA (Certificate Authority).

4. О его недостатках.

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

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

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

Планировщик задач cron — этот способ настройки автоматического обновления. Способ хорош для тех, кто владеет навыками администрирования CentOS 7 и умеет работать с кронами. Нужно еще учитывать, что в работе крона не исключены ошибки, которые могут помешать перевыпуску сертификата. Вывод: следить за обновлением все равно придется.

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

2. Не все домены можно защитить бесплатным Let’s Encrypt. Данный сертификат рассчитан только на защиту одного домена без проверки компании, так называемые DV SSL (Domain Validation).

Так, при помощи Let’s Encrypt нельзя создать следующие типы сертификатов:

  • WildCard сертификат для защиты поддоменов определённого домена;
  • Сертификаты OV SSL( Organization Validation), предполагающие проверку не только домена, но и компании;
  • Сертификаты EV SSL (Extended Validation), сертификат с максимальной степенью защиты и зелёной адресной строкой браузера;
  • Multi-Domain сертификат типа UCC;

Важный момент — нет никаких финансовых гарантий использования Let’s Encrypt. Если вдруг произойдет взлом бесплатного сертификата, то денежную компенсацию никто вам не предоставит.

5. Установка утилиты certbot.

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

# cd ~
# yum -y install wget

# wget https://dl.eff.org/certbot-auto
# mv certbot-auto /usr/local/bin/certbot-auto
# chown root:root /usr/local/bin/certbot-auto
# chmod 0755 /usr/local/bin/certbot-auto

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

# certbot-auto

Будет установлено много программного обеспечения.

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

Выйдем из панели сертификации, введем просто букву «c» и нажмём клавишу Enter.

6. Получение бесплатного ssl-сертификата.

Наша следующая задача — получить бесплатные сертификаты.

Для этого временно остановим nginx, если он вдруг оказался запущен и подтвердим владение доменами с помощью temporary webserver, который certbot поднимет сам на время верификации доменов.

# systemctl stop nginx
# certbot-auto certonly

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Nginx Web Server plugin (nginx) [Misconfigured]
2: Spin up a temporary webserver (standalone)
3: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 2
Plugins selected: Authenticator standalone, Installer None
Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel): site1.ru
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for z.serveradmin.ru
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/z.serveradmin.ru/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/z.serveradmin.ru/privkey.pem
   Your cert will expire on 2020-01-05. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto 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

Проделайте тоже самое действие с доменом www.site1.ru, это делается для получения сертификата и на этот вид домена специально для тех, кто любит ломиться на ‘www‘ — www.site1.ru.

После того, как получили сертификаты, можно проверить конфиг nginx и запустить его. Ошибок быть не должно. Если они есть, то разбирайтесь с ними, возможно где-то ошиблись и допустили простые досадные опечатки.

# nginx -t
# systemctl start nginx

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

7. Автоматическое обновление ssl-сертификата.

Теперь сделаем так, чтобы сертификаты автоматически обновлялись перед истечением срока действия.

Для этого необходимо изменить конфигурации доменов. Они располагаются в директории /etc/letsencrypt/renewal. Так как мы генерировали сертификаты с помощью временного web-сервера, к примеру, наш текущий конфиг site1.ru.conf выглядит вот так:

# renew_before_expiry = 30 days
version = 0.39.0
archive_dir = /etc/letsencrypt/archive/site1.ru
cert = /etc/letsencrypt/live/site1.ru/cert.pem
privkey = /etc/letsencrypt/live/site1.ru/privkey.pem
chain = /etc/letsencrypt/live/site1.ru/chain.pem
fullchain = /etc/letsencrypt/live/site1.ru/fullchain.pem

# Options used in the renewal process
[renewalparams]
account = a9e5d37f80dafd9f0a2f9a2b019cbc3e
authenticator = standalone
server = https://acme-v02.api.letsencrypt.org/directory

Приводим его к следующему виду:

# renew_before_expiry = 30 days
version = 0.39.0
archive_dir = /etc/letsencrypt/archive/site1.ru
cert = /etc/letsencrypt/live/site1.ru/cert.pem
privkey = /etc/letsencrypt/live/site1.ru/privkey.pem
chain = /etc/letsencrypt/live/site1.ru/chain.pem
fullchain = /etc/letsencrypt/live/site1.ru/fullchain.pem

# Options used in the renewal process
[renewalparams]
account = a9e5d37f80dafd9f0a2f9a2b019cbc3e
authenticator = webroot
server = https://acme-v02.api.letsencrypt.org/directory
post_hook = nginx -s reload
[[webroot_map]]
site1.ru = /web/sites/site1/www

По аналогии делаете с остальными виртуальными хостами, для которых используете бесплатные сертификаты Let’s Encrypt.

Настроим автоматический выпуск новых ssl сертификатов, взамен просроченным. Для этого добавляем в /etc/crontab следующую строку:

# Cert Renewal
30 2 1 * * root /usr/local/bin/certbot-auto renew --post-hook "nginx -s reload" >> /var/log/le-renew.log

8. Оригиналы источников информации.

  1. letsencrypt.org «Что такое Let’s Encrypt».
  2. letsencrypt.org «Как работает Let’s Encrypt».
  3. rusonyx.ru «Let’s Encrypt — бесплатный SSL-сертификат: как получить, инструкция по установке, настройке и продлению».
  4. 8host.com «Краткий обзор сервиса Let’s Encrypt».
  5. serveradmin.ru «Настройка web сервера nginx, php-fpm, php7 на CentOS 8» от 28.02.2020

Читайте также: