==================================================================================== === Установка acme.sh: ==================================================================================== # sudo apt-get install socat curl https://get.acme.sh | sh -s email=q@qq.com ==================================================================================== === Получить\обновить сертификат с помощью acme: ==================================================================================== # mkdir -p /var/www/webroot mkdir /etc/ssl/acme adduser cert groupadd tls-cert usermod -a -G tls-cert nginx usermod -a -G tls-cert cert chgrp -R tls-cert /etc/ssl/acme chmod -R 770 /etc/ssl/acme chown -R cert:cert /var/www/webroot == visudo (разрешить непривилегированному пользователю выполнять команду для post-hook)== cert ALL=NOPASSWD:/usr/bin/systemctl reload nginx cert ALL=NOPASSWD:/usr/bin/chgrp -R tls-cert /etc/ssl/acme cert ALL=NOPASSWD:/usr/bin/chmod -R 770 /etc/ssl/acme ==================================================================================== === Отредактировать конфиг nginx. Проверить наличие location для .well-known. Закомментировать всё, что касается https до получения сертификата: ==================================================================================== # server { listen 80; server_name example.com; root /var/www/webroot; charset utf8; location / { auth_basic "Restricted Area"; auth_basic_user_file /etc/nginx/.htpasswd; root /specific/path/to/root; # fancyindex on; # fancyindex_header "/theme1/header.html"; # fancyindex_exact_size off; # if ($ssl_protocol = "") { # rewrite ^/(.*) https://$server_name/$1 permanent; # } } location ~ /.well-known { root /var/www/webroot; allow all; } location /theme1 { alias /etc/nginx/themes/theme1; } location /.assets { alias /etc/nginx/themes/theme1/.assets; } location = /favicon.ico { alias /var/www/static/favicon.ico; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # listen 443 ssl; # ssl_certificate /etc/ssl/acme/example.com_ecc/fullchain.cer; # ssl_certificate_key /etc/ssl/acme/example.com_ecc/example.com.key; # ssl_protocols TLSv1.2 TLSv1.3; # ssl_prefer_server_ciphers off; # ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"; } ==================================================================================== === Выполнить команды под пользователем cert: ==================================================================================== # ~/.acme.sh/acme.sh --issue -d example.com -w /var/www/webroot/ --server letsencrypt --cert-home /etc/ssl/acme --post-hook "sudo systemctl reload nginx; sudo chgrp -R tls-cert /etc/ssl/acme; sudo chmod -R 770 /etc/ssl/acme" --debug == сделать линк каталога домена с ключом и сертификатами на домашний каталог acme. Если в домашней дире не будет каталога с доменом, то домен фактически не будет зарегистрирован в базе локальной инсталляции acme, поэтому обновлять сертификат для него через renew будет невозможно: ln -s /etc/ssl/acme/example.com_ecc/ /home/cert/.acme.sh/example.com_ecc ==================================================================================== === crontab для обновления сертификатов (очень вероятно, что в новых версиях acme запись уже создается автоматом): ==================================================================================== 00 00 * * * /home/cert/.acme.sh/acme.sh --cron --home "/home/cert/.acme.sh" >> /home/cert/1.txt ==================================================================================== === Команды acme для управления: ==================================================================================== # == Просмотреть список доменов, для каких получены сертификаты: ~/.acme.sh/acme.sh --list == Удалить домен из локальной базы (вручную нужно удалять каталог из кастомной диры для хранения ключа и сертификатов - в моём случае это /etc/ssl/acme) ~/.acme.sh/acme.sh --remove -d example.com