Создание SSL wildcard-сертификата Let’s Encrypt с проверкой CloudFlare в CentOS 7

Let’s Encrypt – это центр сертификации (ЦС), который выдает бесплатные сертификаты для шифрования данных TLS. Он предоставляет клиент под названием Certbot, который упрощает процесс создания, проверки, подписания, установки и продления сертификатов.

Читайте также: Основы OpenSSL: SSL-сертификаты, закрытые ключи и запросы на подпись

Let’s Encrypt теперь поддерживает wildcard-сертификаты, которые позволяют защищать все поддомены с помощью единого сертификата. Такие сертификаты полезны, если в рамках одного сервера вы хотите разместить несколько сервисов – веб-интерфейсы, API-интерфейсы и другие сайты.

Чтобы получить wildcard-сертификат Let’s Encrypt, нужно использовать один из DNS-плагинов Certbot, например:

  • certbot-dns-cloudflare
  • certbot-dns-route53
  • certbot-dns-google

Выбор плагина зависит от сервиса, который хранит ваши DNS-записи. Данный мануал поможет вам создать wildcard-сертификат с проверкой CloudFlare через Certbot на сервере CentOS 7. Также вы узнаете, как продлить сертификат.

Требования

  • Сервер CentOS 7, настроенный по этому мануалу.
  • FRDN. Вы можете купить такой домен (например, на Namecheap) или получить его бесплатно (к примеру, на Freenom).
  • Аккаунт Cloudflare.
  • DNS-запись вашего домена на DNS Cloudflare и пара настроенных поддоменов. Дополнительные инструкции можно найти в мануале Cloudflare.

1: Установка Certbot

Пакета certbot нет в стандартном репозитории CentOS. Чтобы установить его, нужно включить репозиторий EPEL.

Чтобы добавить EPEL, введите команду:

sudo yum install -y epel-release

Когда установка завершится, установите certbot:

sudo yum install -y certbot

А затем установите плагин CloudFlare для Certbot:

sudo yum install -y python2-cloudflare python2-certbot-dns-cloudflare

Примечание: Если вы используете другой DNS-сервис, найти подходящий плагин можно с помощью команды yum search.

yum search python2-certbot-dns

Сервер готов к получению сертификата. Теперь вам нужно получить API-ключ CloudFlare.

2: Получение API CloudFlare

Чтобы Certbot мог автоматически обновлять сертификат, ему нужен логин CloudFlare и API-ключ.

Войдите в аккаунт Cloudflare и перейдите на страницу Profile.

Нажмите View в строке Global API Key.

Из соображений безопасности вам будет предложено повторно ввести пароль учетной записи Cloudflare. Введите его и капчу. Затем нажмите кнопку View еще раз. Вы увидите свой ключ API.

Скопируйте этот ключ. Его нужно использовать на следующем этапе.

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

3: Настройка Certbot

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

Сначала запустите команду certbot без каких-либо параметров для создания базового конфигурационного файла:

sudo certbot

Затем создайте файл в каталоге /etc/letsencrypt, где будет указан ваш мейл и API-ключ CloudFlare.

sudo vi /etc/letsencrypt/cloudflareapi.cfg

Добавьте в файл такие строки (указав свои данные):

dns_cloudflare_email = your_cloudflare_login
dns_cloudflare_api_key = your_cloudflare_api_key

Сохраните файл и выйдите из редактора.

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

sudo chmod 600 /etc/letsencrypt/cloudflareapi.cfg

Теперь можно получить сертификат.

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

Чтобы получить сертификат, нужно использовать команду certbot и указать необходимый плагин, файл учетных данных и сервер, который можно использовать для обработки запроса. По умолчанию Certbot использует производственные серверы Let’s Encrypt, которые используют ACME API версии 1, но Certbot использует другой протокол для получения wildcard-сертификатов, поэтому вам необходимо предоставить ему конечную точку ACME v2.

Выполните следующую команду для получения wildcard-сертификата для вашего домена:

sudo certbot certonly --cert-name your_domain --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflareapi.cfg --server https://acme-v02.api.letsencrypt.org/directory -d "*.your_domain" -d your_domain

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


Plugins selected: Authenticator dns-cloudflare, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): your email

Затем будет предложено принять условия обслуживания:

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A

Затем вам будет предложено поделиться своим электронным адресом с Electronic Frontier Foundation:

-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: N

После этого Certbot получит ваш сертификат. Вы увидите такое сообщение:

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your_domain/privkey.pem
Your cert will expire on 2018-07-31. 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

Теперь у вас есть wildcard-сертификат. Давайте посмотрим, какие файлы извлек Certbot. Использовать команду ls, чтобы просмотреть содержимое каталога, в котором хранятся ключи и сертификаты:

sudo ls /etc/letsencrypt/live/your_domain
cert.pem  chain.pem  fullchain.pem  privkey.pem  README

Файл README содержит информацию об этих файлах:

$ cat /etc/letsencrypt/live/your_domain/README
This directory contains your keys and certificates.
`privkey.pem`  : the private key for your certificate.
`fullchain.pem`: the certificate file used in most server software.
`chain.pem`    : used for OCSP stapling in Nginx >=1.3.7.
`cert.pem`     : will break many server configurations, and should not be used
without reading further documentation (see link below).
We recommend not moving these files. For more information, see the Certbot
User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.

Здесь вы можете настроить серверы для поддержки wildcard-сертификата. Обычно для этого нужны только файлы fullchain.pem и privkey.pem.

Например, вы можете настроить несколько веб-сервисов:

  • wwww.example.com
  • api.example.com
  • mail.example.com

Для этого вам понадобится веб-сервер, например Apache или Nginx. Установка и настройка этих серверов выходит за рамки данного мануала, но вы можете найти все необходимые инструкции в следующих мануалах.

Для Nginx:

Для Apache:

5: Обновление сертификата

Let’s Encrypt выдает краткосрочные сертификаты, действительные в течение 90 дней. Настройте задачу cron, чтобы вовремя обнаружить сертификаты, срок действия которых подходит к концу, и автоматически обновить их.

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

sudo crontab -e

Добавьте следующую строку в файл, чтобы настроить автоматическое ежедневное обновление.

30 2 * * * certbot renew --noninteractive

  • 30 2 * * * будет запускать указанную в строке команду каждый день в 2:30 ночи.
  • certbot renew – это команда, которая проверяет сертификаты и обновляет те, чей срок истекает через 30 дней.
  • —noninteractive включает неинтерактивный режим Certbot.

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

Например, чтобы перезагрузить сервер Nginx, откройте файл конфигурации:

sudo vi /etc/letsencrypt/renewal/your_domain.conf

Добавьте следующую строку в раздел [renewalparams]:

renew_hook = systemctl reload nginx

Теперь Certbot автоматически перезапустит веб-сервер после установки обновленного сертификата.

Заключение

В этом мануале вы научились устанавливать  Certbot, получили свой wildcard-сертификат с проверкой DNS и включили автоматическое обновление сертификатов. Теперь вы можете использовать один сертификат с несколькими поддоменами на одном сервере.

Tags: , , , , , , ,