У меня истек срок действия SSL-сертификата на выходных, клиент пропустил электронное письмо с обновлением, и, очевидно, они были недовольны, что их сайт отображал предупреждения SSL.
Поскольку я сейчас использую Lets Encrypt на нескольких сайтах, мне было интересно, могу ли я использовать Certbot для проверки истечения срока действия приобретенных сертификатов и заменить его сертификатом Lets Encrypt в промежутках между обновлениями SSL. Кто-нибудь знает, сработает ли что-то подобное. Я обеспокоен тем, что это может помешать продлению приобретенного сертификата, и я не уверен, что для работы Certbot таким образом потребуется дополнительная настройка.
Есть ли у кого-нибудь совет о том, как лучше всего обрабатывать обновления SSL. На самом деле здесь просто нужно руководство.
Да, замена ежегодного сертификата на Letsencrypt предотвратит дальнейшие проблемы, когда требуется ручное вмешательство.
1) Установите Certbot 2) выпустите свой первый сертификат, включите все обработчики pre-post, чтобы гарантировать загрузку нового сертификата при обновлении (перезапуск nginx, и т.д). Установите адрес электронной почты для продления / аккаунта либо в систему тикетов, либо в список рассылки (если вы уйдете, кто-то другой проверит неудачные продления). Я рекомендую использовать webroot, есть масса документации, как это сделать. 3) настроить cron для запуска certbot renew
время от времени (в течение некоторого времени вы можете перезапустить службу без негативного воздействия на пользователей, но через некоторое время вы можете быстро исправить любые возникающие проблемы).
Нет, Certbot не является инструментом мониторинга для сторонних сервисов, проверьте для этого сторонние сервисы. Также помните, что certbot - это клиент ACME, который использует Letsencrypt.
В скрипте могут быть ошибки, я не тестировал! Пожалуйста, не запускайте его на производстве. Но я считаю, что должно быть примерно так:
#!/bin/bash
my_domain=example.com
my_ip=88.208.57.20 # could be example.com
my_port=443
seconds=86400 # 24h
cert_bot_cert="/etc/letsencrypt/live/$my_domain/fullchain.pem"
cert_bot_key="/etc/letsencrypt/live/$my_domain/privkey.pem"
native_cert="/etc/nginx/ssl/$mydomain/cert.crt"
native_key="/etc/nginx/ssl/$mydomain/key.key"
function certrw {
cat $cer_bot_cert > $native_cert && cat $cert_bot_key > $native_key && nginx -t && service nginx reload
}
expire_date=$(date -d "$(echo | openssl s_client -servername $my_domain -connect $my_ip:$my_port 2>/dev/null | openssl x509 -noout -dates|grep notAfter|cut -d '=' -f2)" +%s)
today=$(date +%s)
diff=$(echo $expire_date-$today|bc)
if [ $diff -lt $seconds ];then
certbot certonly --webroot -w /var/www/letsencrypt/ -d $my_domain && certrw
fi