apt install -y certbot
Добавляем конфиг, где указываем свой email в переменную EMAIL, чтобы важные уведомления приходили на него:
EMAIL=youmail@domain.com; \ mkdir -p /etc/letsencrypt; \ tee /etc/letsencrypt/cli.ini <<EOF # authenticator = webroot webroot-path = /var/www/html # agree-tos = True email = $EMAIL # text = True #quiet = True # post-hook = service nginx reload # max-log-backups = 0 EOF
После проверяем, корректно ли установилось мыло
grep email /etc/letsencrypt/cli.ini
Конфиг NGINX
Настройка NGINX конфига не обязательна, если вы используете modxPanelDaemon последней версии – там уже всё прописано. Просто, надо будет в /var/www/USERNAME/domains.nginx вначале указать set $is_https '1'; и в /var/www/USERNAME/main.nginx раскоментировать #include /etc/nginx/ssl/SITEDOMAIN.conf; указав основной домен сертификата для вашего сайта.Сделать это нужно после того, как для домена будут выпущены сертификаты.
В ином случае, в конфиг надо добавить, что-то вроде:
listen 80; listen 443 ssl; listen [::]:443 ssl; location /.well-known { root /var/www/html; } # other codeИ service nginx reload
Директория .well-known
Теперь надо проверить, доступна ли директория /.well-known для Let's Encrypt из веба. Для этого в ней создаём тестовый файлmkdir -p /var/www/html/.well-known/acme-challenge \ && echo OK > /var/www/html/.well-known/acme-challenge/test.html
Открываем в браузере http://YOU_DOMAIN.ru/.well-known/acme-challenge/test.html, если всё OK, то удаляем тестовые файлы:
rm /var/www/html/.well-known/acme-challenge/test.html && rmdir /var/www/html/.well-known/acme-challenge
Вспомогательные скрипты
Выпуск сертификатов:tee /usr/local/bin/certbot-certonly <<'EOF' #!/bin/sh IFS="," certbot certonly -d "$*"; EOF chmod +x /usr/local/bin/certbot-certonlyИспользовать так:
certbot-certonly domain.ru www.domain.ru
Создание NGINX конфига сертификатов:
tee /usr/local/bin/update-certs <<'DOC' #!/bin/bash mkdir -p /etc/nginx/ssl for CN in /etc/letsencrypt/live/*/ do dest=/etc/nginx/ssl/$(basename $CN).conf names=$(openssl x509 -text -in $CN/cert.pem | grep -o 'DNS:[^,]*' | cut -f2 -d: | xargs); ( echo "# include ${dest#/etc/nginx/};" echo "# server_name $names;" echo "ssl_certificate $CN/fullchain.pem;" echo "ssl_certificate_key $CN/privkey.pem;" echo "ssl_trusted_certificate $CN/chain.pem;" echo ) | tee $dest; done DOC chmod +x /usr/local/bin/update-certsИспользовать так:
update-certs
Выпускаем сертификаты
certbot-certonly domain.com www.domain.com
Обновляем список конфигов для сертификатов:
update-certs
И проверяем сертификаты в папке:
grep -h '^#' /etc/nginx/ssl/*
Далее, в /var/www/USERNAME/domains.nginx заменить:
set $is_https '0';на:
set $is_https '1';
А в /var/www/USERNAME/main.nginx раскоментировать #include /etc/nginx/ssl/SITEDOMAIN.conf;, указав основной домен сертификата для вашего сайта.
И service nginx reload
Перевыпуск сертификатов
Добавим в крон перевыпуск сертификатов:57 */12 * * * certbot renew --allow-subset-of-names
Добавить поддомен в сертификат
Можно добавить до 100 доменов и поддоменов в уже выпущенный сертификат.certbot certonly --expand \ -d example.com \ -d www.example.com \ -d other.example.comВместо -d example.com надо указать основной домен существующего сертификата, а далее уже домены, которыми сертификат нужно расширить.
Возможные проблемы
Сайт может не открываться и выдавать «Ошибку соединения».Тут может потребоваться в /var/www/USERNAME/main.nginx заменить:
listen 443 ssl; listen [::]:443 ssl;на:
listen 443 ssl default_server; listen [::]:443 ssl default_server;
Удаление ненужных сертификатов
Если на сервере нужно удалить некоторые сертификаты, то можно воспользоваться командой:certbot deleteи выбрать, какие сертификаты надо исключить из перевыпуска.
Либо прямой командой:
certbot delete --cert-name example.com