Certbot (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
Certbot
. Дата последней синхронизации: 27 июля 2019. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Certbot
—
ACME
-клиент от
Фонда Электронных Рубежей
, написанный на Python и обеспечивающий такие удобства, как автоматическая настройка веб-сервера и встроенный веб-сервер для вызова HTTP. Certbot рекомендован
Let's Encrypt
.
Установка
Установите
пакет
certbot
.
Также доступны плагины для автоматической настройки и установки выданных сертификатов на веб-серверах:
Плагин для
nginx
предоставляется пакетом
certbot-nginx
.
Плагин для
Apache HTTP Server
предоставляется пакетом
certbot-apache
.
Настройка
Обратитесь к
документации Certbot
для получения дополнительной информации о создании и использовании сертификатов.
Плагины
Важно
Файлы конфигурации могут быть переписаны для добавления настроек и путей сертификатов Certbot при использовании плагина. Рекомендуется заблаговременно сделать
резервную копию
.
Nginx
Плагин
certbot-nginx
предоставляет автоматическую настройку
Nginx (Русский)
. Он пытается найти конфигурацию каждого домена, а также добавляет рекомендованные для безопасности параметры, настройки использования сертификатов и пути к сертификатам Certbot. См. примеры в разделе
#Управление блоками server в Nginx
.
Первоначальная настройка
блоков server
:
# certbot --nginx
Обновить сертификаты:
# certbot renew
Изменить сертификаты без изменения файлов конфигурации nginx:
# certbot --nginx certonly
См. статью
Certbot-Nginx on Arch Linux
для получения дополнительной информации и раздел
#Автоматическое обновление
.
Управление блоками server в Nginx
Следующий пример можно использовать во всех
блоках server
при управлении этими файлами вручную:
/etc/nginx/sites-available/example
server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2; # Cлушать IPv6
  ssl_certificate /etc/letsencrypt/live/
домен
/fullchain.pem; # Управляется Certbot'ом
  ssl_certificate_key /etc/letsencrypt/live/
домен
/privkey.pem; # Управляется Certbot'ом
  include /etc/letsencrypt/options-ssl-nginx.conf;
  ..
}
См. раздел
nginx (Русский)#TLS
для получения более подробной информации.
Также можно создать отдельный конфигурационный файл и включать его в каждый блок server:
/etc/nginx/conf/001-certbot.conf
ssl_certificate /etc/letsencrypt/live/
домен
/fullchain.pem; # Управляется Certbot'ом
ssl_certificate_key /etc/letsencrypt/live/
домен
/privkey.pem; # Управляется Certbot'ом
include /etc/letsencrypt/options-ssl-nginx.conf;
/etc/nginx/sites-available/example
server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2; # Слушать IPv6
  include conf/001-certbot.conf;
  ..
}
Apache
Плагин
certbot-apache
предоставляет автоматическую настройку
Apache HTTP Server (Русский)
. Он пытается найти конфигурацию каждого домена, а также добавляет рекомендованные для безопасности параметры, настройки использования сертификатов и пути к сертификатам Certbot. См. примеры в разделе
#Управление виртуальными хостами Apache
.
Первоначальная настройка
виртуальных хостов
:
# certbot --apache
Обновить сертификаты:
# certbot renew
Изменить сертификаты без изменения файлов конфигурации apache:
# certbot --apache certonly
См. статью
Certbot-Apache on Arch Linux
для получения дополнительной информации и раздел
#Автоматическое обновление
.
Управление виртуальными хостами Apache
Следующий пример можно использовать во всех
виртуальных хостах
при управлении этими файлами вручную:
/etc/httpd/conf/extra/001-certbot.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>

Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/
домен
/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/
домен
/privkey.pem

</VirtualHost>
</IfModule>
/etc/httpd/conf/httpd.conf
<IfModule mod_ssl.c>
  Listen 443
  </IfModule>

  Include conf/extra/001-certbot.conf
  ..
См. раздел
Apache HTTP Server (Русский)#TLS
для получения более подробной информации.
Webroot
Примечание
Метод Webroot требует HTTP на порту 80 для проверки Certbot.
Имя сервера должно соответствовать имени соответствующего DNS.
На хосте могут потребоваться разрешения, чтобы разрешить доступ для чтения к
http://
domain.tld
/.well-known
.
При использовании webroot-метода, клиент Certbot размещает ответ на вызов (challenge response) по адресу
/путь/к/domain.tld/html/.well-known/acme-challenge/
, который используется для проверки.
Использование этого метода более рекомендовано, чем полностью ручная установка (manual-метод), так как он допускает автоматическое обновление сертификатов и упрощает управление ими. Однако использование
плагинов
может быть более предпочтительным, так как они обеспечивают полностью автоматическую настройку и установку.
Сопоставление (mapping) запросов ACME-challenge
The factual accuracy of this article or section is disputed.
Reason:
Путь
/var/lib/letsencrypt
задаётся
certbot
в
webroot
-методе. Создание вручную необязательно, оно относится к методу
#Вручную
. (Discuss in
Talk:Certbot (Русский)
)
Управление может быть упрощено путём сопоставления всех HTTP-запросов для
/.well-known/acme-challenge/
в одну папку, например.
/var/lib/letsencrypt
.
Этот каталог должен быть доступен для записи клиенту Certbot и веб-серверу (
nginx
или
apache
, запущенными под пользователем
http
):
# mkdir -p /var/lib/letsencrypt/.well-known
# chgrp http /var/lib/letsencrypt
# chmod g+s /var/lib/letsencrypt
nginx
Создайте файл с блоком
location
и включите его в блок
server
:
/etc/nginx/conf.d/letsencrypt.conf
location ^~ /.well-known/acme-challenge/ {
  allow all;
  root /var/lib/letsencrypt/;
  default_type "text/plain";
  try_files $uri =404;
}
Пример конфигурации блока
server
:
/etc/nginx/servers-available/domain.conf
server {
  server_name domain.tld
   ..
  include conf.d/letsencrypt.conf;
}
Apache
Создайте файл
/etc/httpd/conf/extra/httpd-acme.conf
:
/etc/httpd/conf/extra/httpd-acme.conf
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/lib/letsencrypt/">
    AllowOverride None
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>
Включив это в
/etc/httpd/conf/httpd.conf
:
/etc/httpd/conf/httpd.conf
Include conf/extra/httpd-acme.conf
Получение сертификат(ов)
This article or section needs expansion.
Reason:
detail lacking to successfully accomplish task being taught (Discuss in
Talk:Certbot (Русский)#accuracy_flag
)
Запросите сертификат для
domain.tld
, используя
/var/lib/letsencrypt/
в качестве общедоступного пути:
# certbot certonly --email
email@example.com
--webroot -w
/var/lib/letsencrypt/
-d
domain.tld
Чтобы добавить (под)домен, включите все зарегистрированные домены, используемые в текущей установке:
# certbot certonly --email
email@example.com
--webroot -w
/var/lib/letsencrypt/
-d
domain.tld,sub.domain.tld
Чтобы обновить (все) текущий сертификат(ы):
# certbot renew
Смотрите
#Автоматическое обновление
в качестве альтернативного варианта.
Вручную
Примечание
Автоматическое обновление недоступно при выполнении ручной установки, см.
#Webroot
.
Если для используемого веб-сервера нет плагина, воспользуйтесь следующей командой:
# certbot certonly --manual
Если вы предпочитаете использовать DNS-запрос (запись TXT), используйте:
# certbot certonly --manual --preferred-challenges dns
Это автоматически проверяет ваш домен и создаёт закрытый ключ и пару сертификатов. Они будут размещены в
/etc/letsencrypt/archive/
ваш.домен
/
, а в каталоге
/etc/letsencrypt/live/
ваш.домен
/
будут созданы символические ссылки на них.
Затем вы можете вручную настроить веб-сервер для использования ключа и сертификата из каталога с символическими ссылками.
Примечание
Запуск этой команды несколько раз приведёт к созданию нескольких наборов файлов в
/etc/letsencrypt/live/
ваш.домен
/
с произвольным числом в конце. При этом Certbot автоматически обновляет символические ссылки в каталоге
/etc/letsencrypt/live/
ваш.домен
/
, чтобы они ссылались на самые свежие сертификаты, так что при использовании этих символических ссылок вам не нужно менять конфигурацию веб-сервера, чтобы использовать обновлённые сертификаты.
Расширенная настройка
Автоматическое обновление
systemd
Создайте
systemd
-службу
certbot.service
:
/etc/systemd/system/certbot.service
[Unit]
Description=Let's Encrypt renewal

[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet --agree-tos
Если вы не используете плагин для управления веб-сервером, то его нужно будет перезагружать вручную для применения обновлённых сертификатов. Это можно сделать добавлением
--deploy-hook "systemctl reload nginx.service"
к команде
ExecStart
[1]
. Разумеется, используйте
httpd.service
вместо
nginx.service
, если необходимо.
Примечание
Перед добавлением
таймера
убедитесь, что служба работает правильно и ничего не пытается запрашивать у пользователя. Имейте в виду, что для завершения работы службы может потребоваться до 480 секунд из-за задержки, добавленной в
v0.29.0
.
Добавьте таймер для проверки продления сертификата дважды в день и включите рандомизированную задержку, чтобы все запросы на продление были равномерно распределены в течение дня для уменьшения загрузки сервера Let's Encrypt
[2]
:
/etc/systemd/system/certbot.timer
[Unit]
Description=Twice daily renewal of Let's Encrypt's certificates

[Timer]
OnCalendar=0/12:00:00
RandomizedDelaySec=1h
Persistent=true

[Install]
WantedBy=timers.target
Включите
и
запустите
certbot.timer
.
Автоматическое обновление wildcard-сертификатов
Процесс довольно прост. Для выпуска wildcard-сертификата необходимо выполнить DNS challenge request,
используя протокол ACMEv2
.
В то время как выпуск wildcard-сертификата вручную прост, его не так просто автоматизировать. DNS challenge представляет собой запись TXT, предоставленную клиентом certbot, которую необходимо установить вручную в DNS.
Нужно будет обновлять DNS при каждом обновлении сертификатов. Чтобы не делать это вручную, воспользуйтесь
rfc2136
, для которого в Certbot есть плагин, упакованный в
certbot-dns-rfc2136
. Также необходимо настроить DNS-сервер, чтобы разрешить динамическое обновление TXT-записей.
Настройка BIND для rfc2136
Сгенерируйте секретный TSIG-ключ:
$ tsig-keygen -a HMAC-SHA512
example-key
и добавьте его в файл конфигурации:
/etc/named.conf
...
zone "
domain.ltd
" IN {
        ...
        // this is for certbot
        update-policy {
                grant
example-key
name _acme-challenge.
domain.ltd
. txt;
        };
        ...
};

key "
example-key
" {
        algorithm hmac-sha512;
        secret "
секретный_ключ
";
};
...
Перезапустите
named.service
.
Настройка certbot для rfc2136
Сгенерируйте файл конфигурации для плагина rfc2136.
/etc/letsencrypt/rfc2136.ini
dns_rfc2136_server =
IP.АД.РЕ.С
dns_rfc2136_name =
example-key
dns_rfc2136_secret =
ВСТАВЬТЕ_КЛЮЧ_БЕЗ_КАВЫЧЕК
dns_rfc2136_algorithm = HMAC-SHA512
Защитите файл с помощью
chmod
, убрав группу и другие разрешения, так как он содержит копию секретного ключа.
Запустите тест:
# certbot certonly --dns-rfc2136 --force-renewal --dns-rfc2136-credentials /etc/letsencrypt/rfc2136.ini --server
https://acme-v02.api.letsencrypt.org/directory
--email
example@domain.ltd
--agree-tos --no-eff-email -d '
domain.ltd'
-d '
*.domain.ltd'
Если проверка успешно пройдена и сертификаты получены, можно автоматизировать Certbot. В ином случае, что-то пошло не так и необходимо отладить вашу установку. Теперь всё сводится к запуску
certbot renew
, см.
#Автоматическое обновление
.
Смотрите также
Transport Layer Security#ACME clients
Статья на Википедии
Документация Certbot от EFF
Список ACME-клиентов