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

# Certbot (Русский)

From ArchWiki

Let’s Encrypt бесплатный, автоматизированный, открытый центр сертификации использующий ACME протокол.

Официальный клиент называется 'Certbot', который позволяет запрашивать действительные сертификаты X.509 прямо из командной строки. Минимальный клиент с ручным созданием CSR доступен в acme-tiny, клиенты, подходящие для скриптов, - это simp_le-gitAUR и letsencrypt-cliAUR.

## Установка

Установить пакет certbot.

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

- Экспериментальный плагин для Nginx предоставляется пакетом certbot-nginx.
- Автоматическая установка с использованием Apache HTTP Server включена через пакет certbot-apache.

## Конфигурация

Для получения дополнительной информации об создании и использовании сертификатов обращайтесь в документацию Certbot documentation

### Webroot

Примечание:

- Метод Webroot требует HTTP на порт 80 для проверки Certbot.
  - Чтобы Certbot проверял использование HTTPS на порту 443, вместо Webroot следует использовать плагин Nginx (--nginx) или Apache ( --apache) (--webroot).
- Имя сервера должно соответствовать имени соответствующего DNS.
- На хосте могут потребоваться разрешения, чтобы разрешить доступ для чтения к `http://domain.tld/.well-known`.

При использовании метода webroot клиент Certbot отправляет запрос вызова внутри `/path/to/domain.tld/html/.well-known/acme-challenge/` который используется для проверки.

Использование этого метода рекомендуется для ручной установки; Он предлагает автоматическое обновление и упрощение управления сертификатами.

Совет: Следующая первоначальная конфигурация сервера nginx server может оказаться полезной для получения первого сертификата:

    /etc/nginx/servers-available/domain.tld

    server {
      listen 80;
      listen [::]:80;
      server_name domain.tld;
      root /usr/share/nginx/html;
      location / {
        index index.htm index.html;
      }
    }

    # ACME challenge
    location ^~ /.well-known {
      allow all;
      auth_basic off;
      alias /var/lib/letsencrypt/.well-known/;
      default_type "text/plain";
      try_files $uri =404;
    }

#### Получить сертификат(ы)

Запросить сертификат для `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

Смотрите #Автоматическое обновление как альтернативный вариант

### Вручную

Note:

- Запускаемый веб-сервер должен быть временно остановлен.
- Автоматическое обновление недоступно при выполнении ручной установки, см. #Webroot.

Если для вашего веб-сервера нет плагина, используйте следующую команду:

    # certbot certonly --manual

Если вы предпочитаете использовать DNS-запрос (запись TXT), используйте:

    # certbot certonly --manual --preferred-challenges dns

Это автоматически проверяет ваш домен и создает закрытый ключ и пару сертификатов. Они будут размещены в `/etc/letsencrypt/live/your.domain/`.

Затем вы можете вручную настроить веб-сервер для использования ключа и сертификата в этом каталоге.

Note: Запуск этой команды несколько раз приведет к созданию нескольких наборов файлов в в `/etc/letsencrypt/live/your.domain/` с произвольным числом в конце, поэтому позаботьтесь о том, чтобы переименовать их в этом каталоге или в файле конфигурации веб-сервера.

## Расширенная настройка

### Конфигурация веб-сервера

Вместо использования плагинов для автоматической настройки может быть предпочтительнее включить SSL для сервера вручную.

Tip:

- Mozilla имеет полезную статью SSL/TLS article, которая включает в себя automated tool чтобы создать более безопасную конфигурацию.
- Cipherli.st обеспечивает надежные примеры внедрения SSL и руководство для большинства современных веб-серверов.

#### nginx

Пример сервера `domain.tld` с использованием подписанного SSL-сертификата Let's Encrypt:

    /etc/nginx/servers-available/domain.tld

    # redirect to https
    server {
      listen 80;
      listen [::]:80;
      server_name domain.tld;
      return 301 https://$host$request_uri;
    }

    server {
      listen 443 ssl http2;
      listen [::]:443 ssl http2;
      ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem;
      ssl_trusted_certificate /etc/letsencrypt/live/domain.tld/chain.pem;
      ssl_session_timeout 1d;
      ssl_session_cache shared:SSL:50m;
      ssl_session_tickets off;
      ssl_prefer_server_ciphers on;
      add_header Strict-Transport-Security max-age=15768000;
      ssl_stapling on;
      ssl_stapling_verify on;
      server_name domain.tld;
      ..
    }

    # A subdomain uses the same SSL-certifcate:
    server {
      listen 443 ssl http2;
      listen [::]:443 ssl http2;
      ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem;
      ssl_trusted_certificate /etc/letsencrypt/live/domain.tld/chain.pem;
      ..
      server_name sub.domain.tld;
      ..
    }

    # ACME challenge
    location ^~ /.well-known {
      allow all;
      alias /var/lib/letsencrypt/.well-known/;
      default_type "text/plain";
      try_files $uri =404;
    }

### Несколько доменов

Управление может быть упрощено путем сопоставления всех HTTP-запросов для `/.well-known/acme-challenge/` в одну папку, например. `/var/lib/letsencrypt`.

Затем путь должен быть доступен для записи клиенту Let's Encrypt и веб-серверу (например, nginx или Apache, запущенному под пользователем http):

    # mkdir -p /var/lib/letsencrypt/.well-known
    # chgrp http /var/lib/letsencrypt
    # chmod g+s /var/lib/letsencrypt

#### nginx

Создайте файл, содержащий блок местоположения, и включите его внутри блока сервера:

    /etc/nginx/conf.d/letsencrypt.conf

    location ^~ /.well-known {
      allow all;
      alias /var/lib/letsencrypt/.well-known/;
      default_type "text/plain";
      try_files $uri =404;
    }

Пример конфигурации сервера:

    /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

### Автоматическое обновление

#### 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

Вероятно, вы захотите, чтобы ваш веб-сервер перезагружал сертификаты после каждого обновления. Добавте одну из этих строк в файл `certbot.service`:

- Apache: `ExecStartPost=/bin/systemctl reload httpd.service`
- nginx: `ExecStartPost=/bin/systemctl reload nginx.service`

Примечание: Перед добавлением timer убедитесь, что служба работает правильно и ничего не пытается запросить.

Добавьте таймер для проверки продления сертификата дважды в день и включите рандомизированную задержку, чтобы все запросы на продление были равномерно распределены в течение дня, чтобы облегчить загрузку сервера Let's Encrypt [1]:

    /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

enable и start `certbot.timer`.

##### Альтернативные услуги

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

###### nginx

    /etc/systemd/system/certbot.service

    [Unit]
    Description=Let's Encrypt renewal

    [Service]
    Type=oneshot
    ExecStart=/usr/bin/certbot renew --post-hook "/usr/bin/systemctl restart nginx.service" --agree-tos

###### Apache

    /etc/systemd/system/certbot.service

    [Unit]
    Description=Let's Encrypt renewal

    [Service]
    Type=oneshot
    ExecStart=/usr/bin/certbot renew --pre-hook "/usr/bin/systemctl stop httpd.service" --post-hook "/usr/bin/systemctl start httpd.service" --quiet --agree-tos

## Смотрите также

- EFF's Certbot documentation
- List of ACME clients

Categories:

- Networking (Русский)
- Encryption (Русский)