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

From ArchWiki
Jump to navigation Jump to search
(update interlanguage links)
(Tag: wiki-scripts)
(sync with the english version (not yet fully translated))
Line 6: Line 6:
 
[[ja:Certbot]]
 
[[ja:Certbot]]
 
{{Unmaintained (Русский)}}
 
{{Unmaintained (Русский)}}
[https://letsencrypt.org/ Let’s Encrypt] бесплатный, автоматизированный, открытый центр сертификации использующий [[Wikipedia:Automated Certificate Management Environment|ACME]] протокол.
+
{{TranslationStatus (Русский)|Certbot|3 июня 2019|573839}}
 +
[https://letsencrypt.org/ Let’s Encrypt] бесплатный, автоматизированный, открытый центр сертификации, использующий [[Wikipedia:Automated Certificate Management Environment|ACME]] протокол.
 +
 
 +
[https://github.com/certbot/certbot Certbot] — официальный консольный ACME-клиент, написанный на Python и обеспечивающий такие удобства, как автоматическая настройка веб-сервера и встроенный веб-сервер для вызова HTTP.
  
Официальный клиент называется 'Certbot', который позволяет запрашивать действительные сертификаты X.509 прямо из командной строки.
 
 
Минимальный клиент с ручным созданием CSR доступен в {{Pkg|acme-tiny}}, клиенты, подходящие для скриптов, - это {{AUR|simp_le-git}} и {{AUR|letsencrypt-cli}}.
 
Минимальный клиент с ручным созданием CSR доступен в {{Pkg|acme-tiny}}, клиенты, подходящие для скриптов, - это {{AUR|simp_le-git}} и {{AUR|letsencrypt-cli}}.
  
 
== Установка ==
 
== Установка ==
  
[[Установить]] пакет {{Pkg|certbot}}.
+
[[Установите]] пакет {{Pkg|certbot}}.
  
 
Плагины доступны для автоматической настройки и установки выданных сертификатов на веб-серверах:
 
Плагины доступны для автоматической настройки и установки выданных сертификатов на веб-серверах:
* Экспериментальный плагин для [[Nginx]] предоставляется пакетом {{Pkg|certbot-nginx}}.
+
* Плагин для [[Nginx (Русский)|nginx]] предоставляется пакетом {{Pkg|certbot-nginx}}.
* Автоматическая установка с использованием [[Apache HTTP Server]] включена через пакет {{Pkg|certbot-apache}}.
+
* Плагин для [[Apache HTTP Server (Русский)|Apache HTTP Server]] предоставляется пакетом {{Pkg|certbot-apache}}.
  
 
== Конфигурация ==
 
== Конфигурация ==
Line 23: Line 25:
 
Для получения дополнительной информации об создании и использовании сертификатов обращайтесь в документацию [https://certbot.eff.org/docs/ Certbot documentation]
 
Для получения дополнительной информации об создании и использовании сертификатов обращайтесь в документацию [https://certbot.eff.org/docs/ Certbot documentation]
  
=== Webroot ===
+
=== Плагины ===
{{Примечание|
+
 
* Метод Webroot требует HTTP на порт 80 для проверки Certbot.
+
{{Warning (Русский)|Файлы конфигурации могут быть переписаны для добавления настроек и путей для сертификатов certbot при использовании плагина. Рекомендуется заблаговременно сделать резервную копию настроек на случай проблем.}}
** Чтобы Certbot проверял использование HTTPS на порту 443, вместо Webroot следует использовать плагин Nginx (--nginx) или Apache ( --apache) (--webroot).
+
 
* Имя сервера должно соответствовать имени соответствующего DNS.
+
==== Nginx ====
* На хосте могут потребоваться разрешения, чтобы разрешить доступ для чтения к {{ic|http://domain.tld/.well-known}}.
+
 
 +
Плагин {{pkg|certbot-nginx}} предоставляет автоматическую настройку [[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; # слушать 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]].
  
Использование этого метода рекомендуется для ручной установки; Он предлагает автоматическое обновление и упрощение управления сертификатами.
+
Также можно создать отдельный файл конфигурации и включить (include) его в каждый блок 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 (Русский)|apache]]. Этот плагин будет пытаться настроить каждый домен. Плагин добавляет дополнительную конфигурацию, рекомендованную для безопасности, настройки для использования сертификатов и пути к сертификатам 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]].
 +
 
 +
=== Webroot ===
  
# A subdomain uses the same SSL-certifcate:
+
{{Примечание|
server {
+
* Метод Webroot требует HTTP на порт 80 для проверки Certbot.
  listen 443 ssl http2;
+
* Имя сервера должно соответствовать имени соответствующего DNS.
  listen [::]:443 ssl http2;
+
* На хосте могут потребоваться разрешения, чтобы разрешить доступ для чтения к {{ic|http://domain.tld/.well-known}}.
  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;
 
}
 
</nowiki>
 
 
}}
 
}}
  
=== Несколько доменов ===
+
При использовании метода webroot клиент Certbot размещает ответ на вызов (challenge response) по адресу {{ic|/путь/к/domain.tld/html/.well-known/acme-challenge/}} который используется для проверки.
 +
 
 +
Использование этого метода более рекомендовано, чем полностью ручная установка (метод manual), так как он допускает автоматическое обновление сертификатов и упрощает управление ими. Однако использование [[#Плагины|плагинов]] может быть более предпочтительным, так как они обеспечивают полностью автоматическую настройку и установку.
 +
 
 +
==== Mapping ACME-challenge requests ====
 +
 
 +
{{Accuracy|In the ''webroot'' way, the {{ic|/var/lib/letsencrypt}} path is dictated by ''certbot''. Manual creation is not necessary, that applies to [[#Manual]].}}
 +
 
 
Управление может быть упрощено путем сопоставления всех HTTP-запросов для {{ic|/.well-known/acme-challenge/}} в одну папку, например. {{ic|/var/lib/letsencrypt}}.
 
Управление может быть упрощено путем сопоставления всех HTTP-запросов для {{ic|/.well-known/acme-challenge/}} в одну папку, например. {{ic|/var/lib/letsencrypt}}.
  
Затем путь должен быть доступен для записи клиенту Let's Encrypt и веб-серверу (например, [[nginx]] или [[Apache]], запущенному под пользователем ''http''):
+
Этот каталог должен быть доступен для записи клиенту Certbot и веб-серверу ([[Nginx (Русский)|nginx]] или [[Apache HTTP Server (Русский)|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}} и включите (include) его в блок {{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 174: 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 183: Line 173:
 
</nowiki>}}
 
</nowiki>}}
  
==== Apache ====
+
===== Apache =====
  
 
Создайте файл {{ic | /etc/httpd/conf/extra/httpd-acme.conf}}:
 
Создайте файл {{ic | /etc/httpd/conf/extra/httpd-acme.conf}}:
Line 198: Line 188:
 
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/''your.domain''/}} с произвольным числом в конце. При этом Certbot автоматически обновляет символические ссылки в каталоге {{ic|/etc/letsencrypt/live/''your.domain''/}}, чтобы они ссылались на самые свежие сертификаты, так что при использовании этих символических ссылок вам не нужно менять конфигурацию веб-сервера, чтобы использовать обновлённые сертификаты.}}
 +
 +
== Расширенная настройка ==
  
 
=== Автоматическое обновление ===
 
=== Автоматическое обновление ===
Line 211: Line 234:
 
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 (Русский)|timer]], убедитесь, что служба работает правильно и ничего не пытается запрашивать у пользователя. Имейте в виду, что для завершения работы службы может потребоваться до 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]:
Line 232: Line 252:
 
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 using the ACMEv2 protocol].
 +
 
 +
В то время как выпуск wildcard-сертификата вручную прост, его не так просто автоматизировать. DNS challenge представляет собой запись TXT, предоставленную клиентом certbot, которую необходимо установить вручную в DNS.
 +
 
 +
Вам нужно будет обновлять DNS при каждом обновлении сертификатов. Чтобы не делать это вручную, вы можете использовать [https://tools.ietf.org/html/rfc2136 rfc2136], для которого в certbot есть плагин, упакованный в {{Pkg|certbot-dns-rfc2136}}. Вам также необходимо настроить DNS-сервер, чтобы разрешить динамическое обновление записей TXT.
 +
 
 +
==== Настройка BIND для rfc2136 ====
 +
Generate a TSIG secret key:
 +
 
 +
$ tsig-keygen -a HMAC-SHA512 '''example-key'''
 +
 
 +
and add it in the configuration file:
 +
 
 +
{{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 "'''a_secret_key'''";
 +
};
 +
...}}
 +
 
 +
[[Restart]] {{ic|named.service}}.
  
===== Альтернативные услуги =====
+
==== Настройка certbot для rfc2136 ====
При использовании автономного метода, перед выполнением запроса на обновление, вы должны остановить свой веб-сервер и запустить веб-сервер, когда работа Certbot будет завершена. Certbot предоставляет hooks для автоматического остановки и перезапуска веб-сервера.
+
Create a configuration file for the rfc2136 plugin.
  
====== nginx ======
+
{{hc|1=/etc/letsencrypt/rfc2136.ini|
{{hc|1=/etc/systemd/system/certbot.service|
+
2=dns_rfc2136_server = '''IP.ADD.RE.SS'''
2=[Unit]
+
dns_rfc2136_name = '''example-key'''
Description=Let's Encrypt renewal
+
dns_rfc2136_secret = '''INSERT_KEY_WITHOUT_QUOTES'''
 +
dns_rfc2136_algorithm = HMAC-SHA512}}
  
[Service]
+
Since the file contains a copy of the secret key, secure it with [[chmod]] by removing the group and others permissions.
Type=oneshot
 
ExecStart=/usr/bin/certbot renew --post-hook "/usr/bin/systemctl restart nginx.service" --agree-tos}}
 
  
====== Apache ======
+
Test what we did:
{{hc|1=/etc/systemd/system/certbot.service|
+
# 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''''
2=[Unit]
 
Description=Let's Encrypt renewal
 
  
[Service]
+
If you pass the validation successfully and receive certificates, then you are good to go with automating certbot. Otherwise, something went wrong and you need to debug your setup. It basically boils down to running {{ic|certbot renew}} from now on, see [[#Automatic renewal]].
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}}
 
  
 
== Смотрите также ==
 
== Смотрите также ==
  
 +
* [[Transport Layer Security#ACME clients]]
 
* [https://certbot.eff.org/ EFF's Certbot documentation]
 
* [https://certbot.eff.org/ EFF's Certbot documentation]
 
* [https://letsencrypt.org/docs/client-options/ List of ACME clients]
 
* [https://letsencrypt.org/docs/client-options/ List of ACME clients]
 +
* [https://wiki.mozilla.org/Security/Server_Side_TLS Статья на Mozilla Wiki] о правильной настройке TLS на сервере
 +
* [https://cipherli.st Cipherli.st] с надежными примерами внедрения TLS и руководством для большинства современных веб-серверов

Revision as of 13:51, 3 June 2019

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

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

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

Certbot — официальный консольный ACME-клиент, написанный на Python и обеспечивающий такие удобства, как автоматическая настройка веб-сервера и встроенный веб-сервер для вызова HTTP.

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

Установка

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

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

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

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

Плагины

Важно: Файлы конфигурации могут быть переписаны для добавления настроек и путей для сертификатов 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; # слушать 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.

Также можно создать отдельный файл конфигурации и включить (include) его в каждый блок 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. Этот плагин будет пытаться настроить каждый домен. Плагин добавляет дополнительную конфигурацию, рекомендованную для безопасности, настройки для использования сертификатов и пути к сертификатам 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 requests

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

Reason: In the webroot way, the /var/lib/letsencrypt path is dictated by certbot. Manual creation is not necessary, that applies to #Manual. (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 и включите (include) его в блок 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/your.domain/ с произвольным числом в конце. При этом Certbot автоматически обновляет символические ссылки в каталоге /etc/letsencrypt/live/your.domain/, чтобы они ссылались на самые свежие сертификаты, так что при использовании этих символических ссылок вам не нужно менять конфигурацию веб-сервера, чтобы использовать обновлённые сертификаты.

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

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

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 если нужно.)

Примечание: Перед добавлением timer, убедитесь, что служба работает правильно и ничего не пытается запрашивать у пользователя. Имейте в виду, что для завершения работы службы может потребоваться до 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, using the ACMEv2 protocol.

В то время как выпуск wildcard-сертификата вручную прост, его не так просто автоматизировать. DNS challenge представляет собой запись TXT, предоставленную клиентом certbot, которую необходимо установить вручную в DNS.

Вам нужно будет обновлять DNS при каждом обновлении сертификатов. Чтобы не делать это вручную, вы можете использовать rfc2136, для которого в certbot есть плагин, упакованный в certbot-dns-rfc2136. Вам также необходимо настроить DNS-сервер, чтобы разрешить динамическое обновление записей TXT.

Настройка BIND для rfc2136

Generate a TSIG secret key:

$ tsig-keygen -a HMAC-SHA512 example-key

and add it in the configuration file:

/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 "a_secret_key";
};
...

Restart named.service.

Настройка certbot для rfc2136

Create a configuration file for the rfc2136 plugin.

/etc/letsencrypt/rfc2136.ini
dns_rfc2136_server = IP.ADD.RE.SS
dns_rfc2136_name = example-key
dns_rfc2136_secret = INSERT_KEY_WITHOUT_QUOTES
dns_rfc2136_algorithm = HMAC-SHA512

Since the file contains a copy of the secret key, secure it with chmod by removing the group and others permissions.

Test what we did:

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

If you pass the validation successfully and receive certificates, then you are good to go with automating certbot. Otherwise, something went wrong and you need to debug your setup. It basically boils down to running certbot renew from now on, see #Automatic renewal.

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