Certbot (Русский)
Let’s Encrypt бесплатный, автоматизированный, открытый центр сертификации использующий ACME протокол.
Официальный клиент называется 'Certbot', который позволяет запрашивать действительные сертификаты X.509 прямо из командной строки. Минимальный клиент с ручным созданием CSR доступен в acme-tiny, клиенты, подходящие для скриптов, - это simp_le-gitAUR и letsencrypt-cliAUR.
Установка
Установить пакет certbot.
Плагины доступны для автоматической настройки и установки выданных сертификатов на веб-серверах:
- Экспериментальный плагин для Nginx предоставляется пакетом certbot-nginx.
- Автоматическая установка с использованием Apache HTTP Server включена через пакет certbot-apache.
Конфигурация
Для получения дополнительной информации об создании и использовании сертификатов обращайтесь в документацию Certbot documentation
Webroot
При использовании метода webroot клиент Certbot отправляет запрос вызова внутри /path/to/domain.tld/html/.well-known/acme-challenge/
который используется для проверки.
Использование этого метода рекомендуется для ручной установки; Он предлагает автоматическое обновление и упрощение управления сертификатами.
Получить сертификат(ы)
Запросить сертификат для 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/live/your.domain/
.
Затем вы можете вручную настроить веб-сервер для использования ключа и сертификата в этом каталоге.
/etc/letsencrypt/live/your.domain/
с произвольным числом в конце, поэтому позаботьтесь о том, чтобы переименовать их в этом каталоге или в файле конфигурации веб-сервера.Расширенная настройка
Конфигурация веб-сервера
Вместо использования плагинов для автоматической настройки может быть предпочтительнее включить SSL для сервера вручную.
- Mozilla имеет полезную статью SSL/TLS article, которая включает в себя automated tool чтобы создать более безопасную конфигурацию.
- Cipherli.st обеспечивает надежные примеры внедрения SSL и руководство для большинства современных веб-серверов.
nginx
Пример сервера domain.tld
с использованием подписанного SSL-сертификата Let's Encrypt:
/etc/nginx/servers-available/domain.tld
# redirect to https server { listen 80; listen [::]:80; server_name domain.tld; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/domain.tld/chain.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security max-age=15768000; ssl_stapling on; ssl_stapling_verify on; server_name domain.tld; .. } # A subdomain uses the same SSL-certifcate: server { listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/domain.tld/chain.pem; .. server_name sub.domain.tld; .. } # ACME challenge location ^~ /.well-known { allow all; alias /var/lib/letsencrypt/.well-known/; default_type "text/plain"; try_files $uri =404; }
Несколько доменов
Управление может быть упрощено путем сопоставления всех HTTP-запросов для /.well-known/acme-challenge/
в одну папку, например. /var/lib/letsencrypt
.
Затем путь должен быть доступен для записи клиенту Let's Encrypt и веб-серверу (например, nginx или Apache, запущенному под пользователем http):
# mkdir -p /var/lib/letsencrypt/.well-known # chgrp http /var/lib/letsencrypt # chmod g+s /var/lib/letsencrypt
nginx
Создайте файл, содержащий блок местоположения, и включите его внутри блока сервера:
/etc/nginx/conf.d/letsencrypt.conf
location ^~ /.well-known { allow all; alias /var/lib/letsencrypt/.well-known/; default_type "text/plain"; try_files $uri =404; }
Пример конфигурации сервера:
/etc/nginx/servers-available/domain.conf
server { server_name domain.tld .. include conf.d/letsencrypt.conf; }
Apache
Создайте файл /etc/httpd/conf/extra/httpd-acme.conf
:
/etc/httpd/conf/extra/httpd-acme.conf
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/" <Directory "/var/lib/letsencrypt/"> AllowOverride None Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS </Directory>
Включив в /etc/httpd/conf/httpd.conf
:
/etc/httpd/conf/httpd.conf
Include conf/extra/httpd-acme.conf
Автоматическое обновление
systemd
Создайте systemd certbot.service
:
/etc/systemd/system/certbot.service
[Unit] Description=Let's Encrypt renewal [Service] Type=oneshot ExecStart=/usr/bin/certbot renew --quiet --agree-tos
Вероятно, вы захотите, чтобы ваш веб-сервер перезагружал сертификаты после каждого обновления. Добавте одну из этих строк в файл certbot.service
:
- Apache:
ExecStartPost=/bin/systemctl reload httpd.service
- nginx:
ExecStartPost=/bin/systemctl reload nginx.service
Добавьте таймер для проверки продления сертификата дважды в день и включите рандомизированную задержку, чтобы все запросы на продление были равномерно распределены в течение дня, чтобы облегчить загрузку сервера Let's Encrypt [1]:
/etc/systemd/system/certbot.timer
[Unit] Description=Twice daily renewal of Let's Encrypt's certificates [Timer] OnCalendar=0/12:00:00 RandomizedDelaySec=1h Persistent=true [Install] WantedBy=timers.target
Альтернативные услуги
При использовании автономного метода, перед выполнением запроса на обновление, вы должны остановить свой веб-сервер и запустить веб-сервер, когда работа Certbot будет завершена. Certbot предоставляет hooks для автоматического остановки и перезапуска веб-сервера.
nginx
/etc/systemd/system/certbot.service
[Unit] Description=Let's Encrypt renewal [Service] Type=oneshot ExecStart=/usr/bin/certbot renew --post-hook "/usr/bin/systemctl restart nginx.service" --agree-tos
Apache
/etc/systemd/system/certbot.service
[Unit] Description=Let's Encrypt renewal [Service] Type=oneshot ExecStart=/usr/bin/certbot renew --pre-hook "/usr/bin/systemctl stop httpd.service" --post-hook "/usr/bin/systemctl start httpd.service" --quiet --agree-tos