Certbot (Русский) - ArchWiki

Jump to content
From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи 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/SSL[ссылка недействительна: раздел не найден] для получения более подробной информации.

Также можно создать отдельный конфигурационный файл и включать его в каждый блок 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/SSL[ссылка недействительна: раздел не найден] для получения более подробной информации.

### Webroot

Примечание:

- Метод Webroot требует HTTP на порту 80 для проверки Certbot.
- Имя сервера должно соответствовать имени соответствующего DNS.
- На хосте могут потребоваться разрешения, чтобы разрешить доступ для чтения к `http://domain.tld/.well-known[устаревшая ссылка 2021-11-07 ⓘ]`.

При использовании 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-клиентов

Categories:

- Networking (Русский)
- Encryption (Русский)
- Commands (Русский)
- Electronic Frontier Foundation (Русский)

Hidden categories:

- Pages with broken section links
- Pages with dead links
- Pages or sections flagged with Template:Accuracy
- Pages or sections flagged with Template:Expansion