Difference between revisions of "Certbot (Русский)"

From ArchWiki
Jump to navigation Jump to search
m (Lahwaacz moved page Let’s Encrypt (Русский) to Certbot (Русский): comply with Help:I18n#Page titles and match the title of the English page)
Tag: wiki-scripts
m (update TranslationStatus template)
 
(9 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
[[Category:Networking (Русский)]]
 
[[Category:Networking (Русский)]]
 
[[Category:Encryption (Русский)]]
 
[[Category:Encryption (Русский)]]
 +
[[Category:Commands (Русский)]]
 +
[[Category:Electronic Frontier Foundation (Русский)]]
 +
[[Category:Русский]]
 
[[en:Certbot]]
 
[[en:Certbot]]
[[ja:Let’s Encrypt]]
+
[[ja:Certbot]]
[https://letsencrypt.org/ Let’s Encrypt] бесплатный, автоматизированный, открытый центр сертификации использующий [[Wikipedia:Automated Certificate Management Environment|ACME]] протокол.
+
{{Unmaintained (Русский)}}
 +
{{TranslationStatus (Русский)|Certbot|27 июля 2019|577289}}
  
Официальный клиент называется 'Certbot', который позволяет запрашивать действительные сертификаты X.509 прямо из командной строки.
+
[https://github.com/certbot/certbot Certbot] — [[ACME]]-клиент от [https://www.eff.org/ Фонда Электронных Рубежей], написанный на Python и обеспечивающий такие удобства, как автоматическая настройка веб-сервера и встроенный веб-сервер для вызова HTTP. Certbot рекомендован [https://letsencrypt.org/ Let's Encrypt].
Минимальный клиент с ручным созданием CSR доступен в {{Pkg|acme-tiny}}, клиенты, подходящие для скриптов, - это {{AUR|simp_le-git}} и {{AUR|letsencrypt-cli}}.
 
  
 
== Установка ==
 
== Установка ==
  
[[Установить]] пакет {{Pkg|certbot}}.
+
[[Установите]] пакет {{Pkg|certbot}}.
  
Плагины доступны для автоматической настройки и установки выданных сертификатов на веб-серверах:
+
Также доступны плагины для автоматической настройки и установки выданных сертификатов на веб-серверах:
* Экспериментальный плагин для [[Nginx]] предоставляется пакетом {{Pkg|certbot-nginx}}.
 
* Автоматическая установка с использованием [[Apache HTTP Server]] включена через пакет {{Pkg|certbot-apache}}.
 
  
== Конфигурация ==
+
* Плагин для [[Nginx (Русский)|nginx]] предоставляется пакетом {{Pkg|certbot-nginx}}.
 +
* Плагин для [[Apache HTTP Server (Русский)|Apache HTTP Server]] предоставляется пакетом {{Pkg|certbot-apache}}.
  
Для получения дополнительной информации об создании и использовании сертификатов обращайтесь в документацию [https://certbot.eff.org/docs/ Certbot documentation]
+
== Настройка ==
  
=== Webroot ===
+
Обратитесь к [https://certbot.eff.org/docs/ документации Certbot] для получения дополнительной информации о создании и использовании сертификатов.
{{Примечание|
+
 
* Метод Webroot требует HTTP на порт 80 для проверки Certbot.
+
=== Плагины ===
** Чтобы Certbot проверял использование HTTPS на порту 443, вместо Webroot следует использовать плагин Nginx (--nginx) или Apache ( --apache) (--webroot).
+
 
* Имя сервера должно соответствовать имени соответствующего DNS.
+
{{Warning (Русский)|Файлы конфигурации могут быть переписаны для добавления настроек и путей сертификатов Certbot при использовании плагина. Рекомендуется заблаговременно сделать '''резервную копию'''.}}
* На хосте могут потребоваться разрешения, чтобы разрешить доступ для чтения к {{ic|http://domain.tld/.well-known}}.
+
 
 +
==== Nginx ====
 +
 
 +
Плагин {{pkg|certbot-nginx}} предоставляет автоматическую настройку [[Nginx (Русский)]]. Он пытается найти конфигурацию каждого домена, а также добавляет рекомендованные для безопасности параметры, настройки использования сертификатов и пути к сертификатам Certbot. См. примеры в разделе [[#Управление блоками server в Nginx]].
 +
 
 +
Первоначальная настройка [[Nginx (Русский)#Блоки server|блоков server]]:
 +
 
 +
# certbot --nginx
 +
 
 +
Обновить сертификаты:
 +
 
 +
# certbot renew
 +
 
 +
Изменить сертификаты без изменения файлов конфигурации nginx:
 +
 
 +
# certbot --nginx certonly
 +
 
 +
См. статью [https://certbot.eff.org/#arch-nginx Certbot-Nginx on Arch Linux] для получения дополнительной информации и раздел [[#Автоматическое обновление]].
 +
 
 +
===== Управление блоками server в Nginx =====
 +
 
 +
Следующий пример можно использовать во всех [[Nginx (Русский)#Блоки server|блоках server]] при управлении этими файлами вручную:
  
 +
{{hc|/etc/nginx/sites-available/example|2=
 +
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;
 +
  ..
 +
}
 
}}
 
}}
  
При использовании метода webroot клиент Certbot отправляет запрос вызова внутри {{ic|/path/to/domain.tld/html/.well-known/acme-challenge/}} который используется для проверки.
+
См. раздел [[Nginx (Русский)#TLS/SSL]] для получения более подробной информации.
  
Использование этого метода рекомендуется для ручной установки; Он предлагает автоматическое обновление и упрощение управления сертификатами.
+
Также можно создать отдельный конфигурационный файл и включать его в каждый блок server:
  
 +
{{hc|/etc/nginx/conf/001-certbot.conf|2=
 +
ssl_certificate /etc/letsencrypt/live/''домен''/fullchain.pem; # Управляется Certbot'ом
 +
ssl_certificate_key /etc/letsencrypt/live/''домен''/privkey.pem; # Управляется Certbot'ом
 +
include /etc/letsencrypt/options-ssl-nginx.conf;
 +
}}
  
{{Совет|1=Следующая первоначальная конфигурация сервера [[Nginx#Server_blocks|nginx server]] может оказаться полезной для получения первого сертификата:
+
{{hc|/etc/nginx/sites-available/example|<nowiki>
{{hc|/etc/nginx/servers-available/domain.tld|
 
<nowiki>
 
 
server {
 
server {
   listen 80;
+
   listen 443 ssl http2;
   listen [::]:80;
+
   listen [::]:443 ssl http2; # Слушать IPv6
   server_name domain.tld;
+
   include conf/001-certbot.conf;
   root /usr/share/nginx/html;
+
   ..
  location / {
 
    index index.htm index.html;
 
  }
 
 
}
 
}
 +
</nowiki>}}
  
# ACME challenge
+
==== Apache ====
location ^~ /.well-known {
 
  allow all;
 
  auth_basic off;
 
  alias /var/lib/letsencrypt/.well-known/;
 
  default_type "text/plain";
 
  try_files $uri =404;
 
}
 
</nowiki>
 
}}
 
}}
 
  
==== Получить сертификат(ы)  ====
+
Плагин {{pkg|certbot-apache}} предоставляет автоматическую настройку [[Apache HTTP Server (Русский)]]. Он пытается найти конфигурацию каждого домена, а также добавляет рекомендованные для безопасности параметры, настройки использования сертификатов и пути к сертификатам Certbot. См. примеры в разделе [[#Управление виртуальными хостами Apache]].
Запросить сертификат для {{ic|domain.tld}} для {{ic|/var/lib/letsencrypt/}} как общедоступный путь:
 
# certbot certonly --email '''email@example.com''' --webroot -w '''/var/lib/letsencrypt/''' -d '''domain.tld'''
 
  
Чтобы добавить (дополнительный) домен(ы), включите все зарегистрированные домены, используемые в текущей настройке:
+
Первоначальная настройка [[Apache HTTP Server (Русский)#Виртуальные_хосты|виртуальных хостов]]:
# certbot certonly --email '''email@example.com''' --webroot -w '''/var/lib/letsencrypt/''' -d '''domain.tld,sub.domain.tld'''
 
  
Чтобы обновить (все) текущий сертификат (ы):
+
  # certbot --apache
  # certbot renew
 
  
Смотрите [[#Автоматическое обновление]] как альтернативный вариант
+
Обновить сертификаты:
  
=== Вручную ===
+
# certbot renew
  
{{Note|
+
Изменить сертификаты без изменения файлов конфигурации apache:
* Запускаемый веб-сервер должен быть временно остановлен.
 
* Автоматическое обновление недоступно при выполнении ручной установки, см. [[#Webroot]].
 
}}
 
  
Если для вашего веб-сервера нет плагина, используйте следующую команду:
+
  # certbot --apache certonly
  # certbot certonly --manual
 
  
Если вы предпочитаете использовать DNS-запрос (запись TXT), используйте:
+
См. статью [https://certbot.eff.org/#arch-apache Certbot-Apache on Arch Linux] для получения дополнительной информации и раздел [[#Автоматическое обновление]].
# certbot certonly --manual --preferred-challenges dns
 
  
Это автоматически проверяет ваш домен и создает закрытый ключ и пару сертификатов. Они будут размещены в {{ic|/etc/letsencrypt/live/''your.domain''/}}.
+
===== Управление виртуальными хостами Apache =====
  
Затем вы можете вручную настроить веб-сервер для использования ключа и сертификата в этом каталоге.
+
Следующий пример можно использовать во всех [[Apache HTTP Server (Русский)#Виртуальные хосты|виртуальных хостах]] при управлении этими файлами вручную:
  
{{Note|Запуск этой команды несколько раз приведет к созданию нескольких наборов файлов в в {{ic|/etc/letsencrypt/live/''your.domain''/}} с произвольным числом в конце, поэтому позаботьтесь о том, чтобы переименовать их в этом каталоге или в файле конфигурации веб-сервера.}}
+
{{hc|/etc/httpd/conf/extra/001-certbot.conf|2=
 +
<IfModule mod_ssl.c>
 +
<VirtualHost *:443>
  
== Расширенная настройка ==
+
Include /etc/letsencrypt/options-ssl-apache.conf
=== Конфигурация веб-сервера ===
+
SSLCertificateFile /etc/letsencrypt/live/''домен''/fullchain.pem
Вместо использования плагинов для автоматической настройки может быть предпочтительнее включить SSL для сервера вручную.
+
SSLCertificateKeyFile /etc/letsencrypt/live/''домен''/privkey.pem
  
{{Tip|
+
</VirtualHost>
* Mozilla имеет полезную статью [https://wiki.mozilla.org/Security/Server_Side_TLS SSL/TLS article], которая включает в себя  [https://mozilla.github.io/server-side-tls/ssl-config-generator/ automated tool] чтобы создать более безопасную конфигурацию.
+
</IfModule>
* [https://cipherli.st Cipherli.st] обеспечивает надежные примеры внедрения SSL и руководство для большинства современных веб-серверов.
 
 
}}
 
}}
  
==== nginx ====
+
{{hc|/etc/httpd/conf/httpd.conf|<nowiki>
Пример сервера {{ic|domain.tld}} с использованием подписанного SSL-сертификата Let's Encrypt:
+
   <IfModule mod_ssl.c>
{{hc|/etc/nginx/servers-available/domain.tld|
+
   Listen 443
<nowiki>
+
   </IfModule>
# redirect to https
 
server {
 
   listen 80;
 
   listen [::]:80;
 
   server_name domain.tld;
 
  return 301 https://$host$request_uri;
 
}
 
  
server {
+
   Include conf/extra/001-certbot.conf
   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;
 
 
   ..
 
   ..
}
+
</nowiki>}}
 +
 
 +
См. раздел [[Apache HTTP Server (Русский)#TLS/SSL]] для получения более подробной информации.
  
# A subdomain uses the same SSL-certifcate:
+
=== Webroot ===
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 {
+
* Метод Webroot требует HTTP на порту 80 для проверки Certbot.
  allow all;
+
* Имя сервера должно соответствовать имени соответствующего DNS.
  alias /var/lib/letsencrypt/.well-known/;
+
* На хосте могут потребоваться разрешения, чтобы разрешить доступ для чтения к {{ic|http://domain.tld/.well-known}}.
  default_type "text/plain";
 
  try_files $uri =404;
 
}
 
</nowiki>
 
 
}}
 
}}
  
=== Несколько доменов ===
+
При использовании webroot-метода, клиент Certbot размещает ответ на вызов (challenge response) по адресу {{ic|/путь/к/domain.tld/html/.well-known/acme-challenge/}}, который используется для проверки.
Управление может быть упрощено путем сопоставления всех HTTP-запросов для {{ic|/.well-known/acme-challenge/}} в одну папку, например. {{ic|/var/lib/letsencrypt}}.
+
 
 +
Использование этого метода более рекомендовано, чем полностью ручная установка (manual-метод), так как он допускает автоматическое обновление сертификатов и упрощает управление ими. Однако использование [[#Плагины|плагинов]] может быть более предпочтительным, так как они обеспечивают полностью автоматическую настройку и установку.
 +
 
 +
==== Сопоставление (mapping) запросов ACME-challenge ====
 +
 
 +
{{Accuracy|Путь {{ic|/var/lib/letsencrypt}} задаётся ''certbot'' в ''webroot''-методе. Создание вручную необязательно, оно относится к методу [[#Вручную]].}}
 +
 
 +
Управление может быть упрощено путём сопоставления всех HTTP-запросов для {{ic|/.well-known/acme-challenge/}} в одну папку, например. {{ic|/var/lib/letsencrypt}}.
 +
 
 +
Этот каталог должен быть доступен для записи клиенту Certbot и веб-серверу ([[Nginx (Русский)|nginx]] или [[Apache HTTP Server (Русский)|apache]], запущенными под пользователем ''http''):
  
Затем путь должен быть доступен для записи клиенту Let's Encrypt и веб-серверу (например, [[nginx]] или [[Apache]], запущенному под пользователем ''http''):
 
 
  # mkdir -p /var/lib/letsencrypt/.well-known
 
  # mkdir -p /var/lib/letsencrypt/.well-known
 
  # chgrp http /var/lib/letsencrypt
 
  # chgrp http /var/lib/letsencrypt
 
  # chmod g+s /var/lib/letsencrypt
 
  # chmod g+s /var/lib/letsencrypt
  
==== nginx ====
+
===== nginx =====
 +
 
 +
Создайте файл с блоком {{ic|location}} и включите его в блок {{ic|server}}:
  
Создайте файл, содержащий блок местоположения, и включите его внутри блока сервера:
 
 
{{hc|/etc/nginx/conf.d/letsencrypt.conf|
 
{{hc|/etc/nginx/conf.d/letsencrypt.conf|
 
<nowiki>
 
<nowiki>
location ^~ /.well-known {
+
location ^~ /.well-known/acme-challenge/ {
 
   allow all;
 
   allow all;
   alias /var/lib/letsencrypt/.well-known/;
+
   root /var/lib/letsencrypt/;
 
   default_type "text/plain";
 
   default_type "text/plain";
 
   try_files $uri =404;
 
   try_files $uri =404;
Line 171: Line 163:
 
</nowiki>}}
 
</nowiki>}}
  
Пример конфигурации сервера:
+
Пример конфигурации блока {{ic|server}}:
 +
 
 
{{hc|/etc/nginx/servers-available/domain.conf|<nowiki>
 
{{hc|/etc/nginx/servers-available/domain.conf|<nowiki>
 
server {
 
server {
Line 180: Line 173:
 
</nowiki>}}
 
</nowiki>}}
  
==== Apache ====
+
===== Apache =====
 +
 
 +
Создайте файл {{ic|/etc/httpd/conf/extra/httpd-acme.conf}}:
  
Создайте файл {{ic | /etc/httpd/conf/extra/httpd-acme.conf}}:
 
 
{{hc|/etc/httpd/conf/extra/httpd-acme.conf|<nowiki>
 
{{hc|/etc/httpd/conf/extra/httpd-acme.conf|<nowiki>
 
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
 
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
Line 191: Line 185:
 
</Directory>
 
</Directory>
 
</nowiki>}}
 
</nowiki>}}
Включив в {{ic|/etc/httpd/conf/httpd.conf}}:
+
 
 +
Включив это в {{ic|/etc/httpd/conf/httpd.conf}}:
 +
 
 
{{hc|/etc/httpd/conf/httpd.conf|<nowiki>
 
{{hc|/etc/httpd/conf/httpd.conf|<nowiki>
 
Include conf/extra/httpd-acme.conf
 
Include conf/extra/httpd-acme.conf
 
</nowiki>}}
 
</nowiki>}}
 +
 +
==== Получение сертификат(ов)  ====
 +
 +
{{Expansion|detail lacking to successfully accomplish task being taught|section=accuracy_flag}}
 +
 +
Запросите сертификат для {{ic|domain.tld}}, используя {{ic|/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
 +
 +
Это автоматически проверяет ваш домен и создаёт закрытый ключ и пару сертификатов. Они будут размещены в {{ic|/etc/letsencrypt/archive/''ваш.домен''/}}, а в каталоге {{ic|/etc/letsencrypt/live/''ваш.домен''/}} будут созданы символические ссылки на них.
 +
 +
Затем вы можете вручную настроить веб-сервер для использования ключа и сертификата из каталога с символическими ссылками.
 +
 +
{{Note (Русский)|Запуск этой команды несколько раз приведёт к созданию нескольких наборов файлов в {{ic|/etc/letsencrypt/live/''ваш.домен''/}} с произвольным числом в конце. При этом Certbot автоматически обновляет символические ссылки в каталоге {{ic|/etc/letsencrypt/live/''ваш.домен''/}}, чтобы они ссылались на самые свежие сертификаты, так что при использовании этих символических ссылок вам не нужно менять конфигурацию веб-сервера, чтобы использовать обновлённые сертификаты.}}
 +
 +
== Расширенная настройка ==
  
 
=== Автоматическое обновление ===
 
=== Автоматическое обновление ===
  
 
==== systemd ====
 
==== systemd ====
Создайте [[systemd]] {{ic | certbot.service}}:
+
 
 +
Создайте [[systemd (Русский)|systemd]]-службу {{ic|certbot.service}}:
 +
 
 
{{hc|1=/etc/systemd/system/certbot.service|
 
{{hc|1=/etc/systemd/system/certbot.service|
 
2=[Unit]
 
2=[Unit]
Line 208: Line 244:
 
ExecStart=/usr/bin/certbot renew --quiet --agree-tos}}
 
ExecStart=/usr/bin/certbot renew --quiet --agree-tos}}
  
Вероятно, вы захотите, чтобы ваш веб-сервер перезагружал сертификаты после каждого обновления. Добавте одну из этих строк в файл {{ic|certbot.service}}:
+
Если вы не используете плагин для управления веб-сервером, то его нужно будет перезагружать вручную для применения обновлённых сертификатов. Это можно сделать добавлением {{ic|--deploy-hook "systemctl reload nginx.service"}} к команде  {{ic|ExecStart}} [https://certbot.eff.org/docs/using.html#renewing-certificates]. Разумеется, используйте {{ic|httpd.service}} вместо {{ic|nginx.service}}, если необходимо.
 
 
* Apache: {{ic|1=ExecStartPost=/bin/systemctl reload httpd.service}}
 
* nginx: {{ic|1=ExecStartPost=/bin/systemctl reload nginx.service}}
 
  
{{Примечание|Перед добавлением [[systemd/Timers|timer]] убедитесь, что служба работает правильно и ничего не пытается запросить.}}
+
{{Note (Русский)|Перед добавлением [[systemd/Timers (Русский)|таймера]] убедитесь, что служба работает правильно и ничего не пытается запрашивать у пользователя. Имейте в виду, что для завершения работы службы может потребоваться до 480 секунд из-за задержки, добавленной в [https://github.com/certbot/certbot/blob/master/CHANGELOG.md#0290---2018-12-05 v0.29.0].}}
  
Добавьте таймер для проверки продления сертификата дважды в день и включите рандомизированную задержку, чтобы все запросы на продление были равномерно распределены в течение дня, чтобы облегчить загрузку сервера Let's Encrypt [https://certbot.eff.org/#arch-nginx]:
+
Добавьте таймер для проверки продления сертификата дважды в день и включите рандомизированную задержку, чтобы все запросы на продление были равномерно распределены в течение дня для уменьшения загрузки сервера Let's Encrypt [https://certbot.eff.org/#arch-nginx]:
  
 
{{hc|1=/etc/systemd/system/certbot.timer|
 
{{hc|1=/etc/systemd/system/certbot.timer|
Line 229: Line 262:
 
WantedBy=timers.target}}
 
WantedBy=timers.target}}
  
[[enable]] и [[start]] {{ic|certbot.timer}}.
+
[[Включите]] и [[запустите]] {{ic|certbot.timer}}.
 +
 
 +
=== Автоматическое обновление wildcard-сертификатов ===
 +
 
 +
Процесс довольно прост. Для выпуска wildcard-сертификата необходимо выполнить DNS challenge request, [https://community.letsencrypt.org/t/acme-v2-and-wildcard-certificate-support-is-live/55579 используя протокол ACMEv2].
 +
 
 +
В то время как выпуск wildcard-сертификата вручную прост, его не так просто автоматизировать. DNS challenge представляет собой запись TXT, предоставленную клиентом certbot, которую необходимо установить вручную в DNS.
 +
 
 +
Нужно будет обновлять DNS при каждом обновлении сертификатов. Чтобы не делать это вручную, воспользуйтесь [https://tools.ietf.org/html/rfc2136 rfc2136], для которого в Certbot есть плагин, упакованный в {{Pkg|certbot-dns-rfc2136}}. Также необходимо настроить DNS-сервер, чтобы разрешить динамическое обновление TXT-записей.
 +
 
 +
==== Настройка BIND для rfc2136 ====
 +
 
 +
Сгенерируйте секретный TSIG-ключ:
 +
 
 +
$ tsig-keygen -a HMAC-SHA512 '''example-key'''
 +
 
 +
и добавьте его в файл конфигурации:
 +
 
 +
{{hc|1=/etc/named.conf|
 +
2=...
 +
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 "'''секретный_ключ'''";
 +
};
 +
...}}
 +
 
 +
[[Перезапустите]] {{ic|named.service}}.
 +
 
 +
==== Настройка certbot для rfc2136 ====
 +
 
 +
Сгенерируйте файл конфигурации для плагина rfc2136.
  
===== Альтернативные услуги =====
+
{{hc|1=/etc/letsencrypt/rfc2136.ini|
При использовании автономного метода, перед выполнением запроса на обновление, вы должны остановить свой веб-сервер и запустить веб-сервер, когда работа Certbot будет завершена. Certbot предоставляет hooks для автоматического остановки и перезапуска веб-сервера.
+
2=dns_rfc2136_server = '''IP.АД.РЕ.С'''
 +
dns_rfc2136_name = '''example-key'''
 +
dns_rfc2136_secret = '''ВСТАВЬТЕ_КЛЮЧ_БЕЗ_КАВЫЧЕК'''
 +
dns_rfc2136_algorithm = HMAC-SHA512}}
  
====== nginx ======
+
Защитите файл с помощью [[chmod]], убрав группу и другие разрешения, так как он содержит копию секретного ключа.
{{hc|1=/etc/systemd/system/certbot.service|
 
2=[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 ======
+
# 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''''
{{hc|1=/etc/systemd/system/certbot.service|
 
2=[Unit]
 
Description=Let's Encrypt renewal
 
  
[Service]
+
Если проверка успешно пройдена и сертификаты получены, можно автоматизировать Certbot. В ином случае, что-то пошло не так и необходимо отладить вашу установку. Теперь всё сводится к запуску {{ic|certbot renew}}, см. [[#Автоматическое обновление]].
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}}
 
  
 
== Смотрите также ==
 
== Смотрите также ==
  
* [https://certbot.eff.org/ EFF's Certbot documentation]
+
* [[Transport Layer Security#ACME clients]]
* [https://letsencrypt.org/docs/client-options/ List of ACME clients]
+
* [[Wikipedia:ru:Let’s Encrypt|Статья на Википедии]]
 +
* [https://certbot.eff.org/ Документация Certbot от EFF]
 +
* [https://letsencrypt.org/docs/client-options/ Список ACME-клиентов]

Latest revision as of 18:44, 27 July 2019

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Certbot. Дата последней синхронизации: 27 июля 2019. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

CertbotACME-клиент от Фонда Электронных Рубежей, написанный на Python и обеспечивающий такие удобства, как автоматическая настройка веб-сервера и встроенный веб-сервер для вызова HTTP. Certbot рекомендован Let's Encrypt.

Установка

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

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

Настройка

Обратитесь к документации 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.

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

Использование этого метода более рекомендовано, чем полностью ручная установка (manual-метод), так как он допускает автоматическое обновление сертификатов и упрощает управление ими. Однако использование плагинов может быть более предпочтительным, так как они обеспечивают полностью автоматическую настройку и установку.

Сопоставление (mapping) запросов ACME-challenge

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

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

Получение сертификат(ов)

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

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, см. #Автоматическое обновление.

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