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

From ArchWiki
Jump to navigation Jump to search
m (update TranslationStatus template)
 
(26 intermediate revisions by 5 users not shown)
Line 1: Line 1:
 
[[Category:Networking (Русский)]]
 
[[Category:Networking (Русский)]]
 
[[Category:Encryption (Русский)]]
 
[[Category:Encryption (Русский)]]
[[en:Let’s Encrypt]]
+
[[Category:Commands (Русский)]]
[https://letsencrypt.org/ Let’s Encrypt] бесплатный, автоматизированный, открытый центр сертификации использующий [[Wikipedia:Automated Certificate Management Environment|ACME]] протокол.
+
[[Category:Electronic Frontier Foundation (Русский)]]
 +
[[Category:Русский]]
 +
[[en:Certbot]]
 +
[[ja:Certbot]]
 +
{{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 доступен в {{AUR|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] для получения дополнительной информации о создании и использовании сертификатов.
{{Note|
+
 
* Метод 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;
 +
}}
  
{{Tip|1=The following initial [[Nginx#Server_blocks|nginx server]] configuration may be helpful to obtain a first-time certificate:
+
{{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
 
  
Смотрите [[#Automatic renewal]]{{Broken section link}} как альтернативный вариант
+
Обновить сертификаты:
  
=== Вручную ===
+
# 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 170: 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 179: 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 190: 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 207: 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}}
 
  
{{Note|Перед добавлением [[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 228: Line 262:
 
WantedBy=timers.target}}
 
WantedBy=timers.target}}
  
[[Enable]] and [[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;
 +
        };
 +
        ...
 +
};
  
===== Alternative services =====
+
key "'''example-key'''" {
When using the standalone method you should stop your webserver before executing the renew request, and start your webserver when Certbot is finished. Certbot provides hooks to automatically stop and restart a web server.
+
        algorithm hmac-sha512;
 +
        secret "'''секретный_ключ'''";
 +
};
 +
...}}
  
====== nginx ======
+
[[Перезапустите]] {{ic|named.service}}.
{{hc|1=/etc/systemd/system/certbot.service|
+
 
2=[Unit]
+
==== Настройка certbot для rfc2136 ====
Description=Let's Encrypt renewal
+
 
 +
Сгенерируйте файл конфигурации для плагина rfc2136.
 +
 
 +
{{hc|1=/etc/letsencrypt/rfc2136.ini|
 +
2=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''''
  
[Service]
+
Если проверка успешно пройдена и сертификаты получены, можно автоматизировать Certbot. В ином случае, что-то пошло не так и необходимо отладить вашу установку. Теперь всё сводится к запуску {{ic|certbot renew}}, см. [[#Автоматическое обновление]].
Type=oneshot
 
ExecStart=/usr/bin/certbot renew --post-hook "/usr/bin/systemctl restart nginx.service" --agree-tos}}
 
  
====== Apache ======
+
== Смотрите также ==
{{hc|1=/etc/systemd/system/certbot.service|
 
2=[Unit]
 
Description=Let's Encrypt renewal
 
  
[Service]
+
* [[Transport Layer Security#ACME clients]]
Type=oneshot
+
* [[Wikipedia:ru:Let’s Encrypt|Статья на Википедии]]
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/ Документация 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, см. #Автоматическое обновление.

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