Для того чтобы обновить (продлить) сертификат Let’s Encrypt необходимо сделать следующие действия.
upd:19.08.2019
Для того, чтобы обновлённые сертификаты заработали, необходимо перезагружать сервис, который используется сертификаты, например /etc/init.d/nginx reload Чтобы проверить состояние сертификатов, запустить команду: /usr/bin/certbot certificates
Настройка nginx, если требуется. В файле конфигурации /etc/nginx/conf.d/def.conf прописываю строчку include acme сразу после заголовка server:
server { include acme; listen 80; server_name _; root /var/www; index index.php index.html; location / { root /var/www; } }
В файле /etc/nginx/acme прописывается:
location ^~ /.well-known/acme-challenge/ { alias /var/www/html/; }
Перейти в каталог, где установлен Let’s Encrypt. У меня это каталог /tmp/letsencrypt (при других вариантах установки это может быть каталог /opt/letsencrypt).
cd letsencrypt
Останавливаем веб-сервер (обычно это nginx, но в моём варианте я отключал apache).
sudo service apache2 stop
Обновление letsencrypt.
git pull
Обновление сертификатов.
./letsencrypt-auto renew
При выполнении данной команды, я получил ошибку и сертификаты не обновились.
Attempting to renew cert from /etc/letsencrypt/renewal/unix-garage.tk.conf produced an unexpected error: The manual plugin is not working; there may be problems with your existing configuration. The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',). Skipping.
Выйти из положения мне помогла вот такая команда.
./certbot-auto certonly --debug --force-renew -a manual -d www.domain.com -d domain.com
«domain.com» надо заменить на имя своего домена. После выполнения команды необходимо вручную проделать некоторые действия, которые описаны в командной строке (создать файл имя и содержимое которого указано в командной строке). После этого сертификаты были успешно созданы. Перезагружаем апач.
sudo service apache2 restart
To obtain a new or tweaked version of this certificate in the future, simply run certbot-auto again. To non-interactively renew *all* of your certificates, run "certbot-auto renew"
В идеале работает авто обновление из cron:
0 0 1 * * /tmp/letsencrypt/letsencrypt-auto renew && service apache2 restart
Установлено раз в месяц.
Ошибки и их решение.
При обновление сертификата ошибка:
Attempting to parse the version 0.14.2 renewal configuration file found at /etc/letsencrypt/renewal/mail.unix-garage.tk.conf with version 0.10.2 of Certbot. This might not work.
Одно из решений поправить версию в конфиге хоста /etc/letsencrypt/renewal/.
Если возникает ошибка вида:
[error] 22638#0: *73 access forbidden by rule, client:
настроить nginx как описано в статье. Если не помогает, то искать в имеющейся конфигурации настройку вида:
location ~ /\. { deny all; access_log off; log_not_found off; }
и закомментировать/удалить её. Либо пробовать вот такой вариант настройки для /.well-known/acme-challenge:
location /.well-known/acme-challenge { allow all; alias /opt/acme/.well-known/acme-challenge/; }
Если в дальнейшем при обновлении сертификата возникает ошибка:
ConnectionError: HTTPSConnectionPool(host='acme-v01.api.letsencrypt.org', port=443): Max retries exceeded with url: /directory (Caused by NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7fe605287890>: Failed to establish a new connection: [Errno -2] Name or service not known',))
ищите проблему в недоступности хоста acme-v01.api.letsencrypt.org (пинг, трасеровка, фаервол). Частично про эту проблему есть информация здесь — https://community.letsencrypt.org/t/max-retries-exceeded-with-acme-v01-api-letsencrypt-org-443/10711/9
Установка с нуля по инструкции с оф. сайта — https://certbot.eff.org/ (выбрать веб-сервер и ОС)
Спасибо за статью! Нашел здесь нужную команду на обновление серта вручную. А также пофиксил ошибку с конфликтом разных версий у certbot-auto и пакетного certbot.
Рад что пригодились мои наработки.