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