SSL: автоматичне оновлення
Хостинг із cPanel — сертифікат оновлюється сам
Задача cron у cPanel раз на добу забирає свіжий сертифікат і ставить його на сайт через вбудований інструмент cPanel. SSH не потрібен.
Оновлюється сам
Підходить для хостингу з панеллю cPanel: Hostiq, Hostpro, Ukrnames, GoDaddy, Namecheap, частина тарифів NIC.UA та багато інших. Ознака cPanel — у панелі є розділи «Files», «Security», «Advanced», а адреса входу часто закінчується на :2083. Доступ по SSH не потрібен, усе робиться мишею в панелі.
Ваш закритий ключ зберігається в самій cPanel і в скрипт не потрапляє: cPanel сама підбирає до нового сертифіката ключ, з яким сертифікат ставили вперше.
Що знадобиться
- Посилання на сертифікат із кабінету:
https://api.zrazu.com/ssl-pull/zsp_ВАШ_ТОКЕН. - У cPanel — пункт Cron Jobs у розділі «Advanced». Якщо його немає, тариф не дозволяє задач за розкладом: напишіть хостеру або перейдіть на ручне оновлення.
- 10 хвилин.
Крок 1. Перше встановлення (якщо сертифікат ще не стоїть)
- Відкрийте Security → SSL/TLS → Manage SSL sites.
- У полі Domain оберіть example.com.
- Certificate (CRT) — вставте вміст
https://api.zrazu.com/ssl-pull/zsp_ВАШ_ТОКЕН/cert.pem(відкрийте посилання в браузері і скопіюйте весь текст). - Private Key (KEY) — ваш закритий ключ. Якщо CSR створювали в цій cPanel, ключ підставиться сам після вставки сертифіката.
- Certificate Authority Bundle (CABUNDLE) — вміст
https://api.zrazu.com/ssl-pull/zsp_ВАШ_ТОКЕН/chain.pem. - Натисніть Install Certificate.
Після цього ключ збережено в cPanel, і далі сертифікат оновлюватиметься без нього.
Крок 2. Скрипт оновлення
- Відкрийте Files → File Manager. Ви в домашній теці (зліва вгорі вибрано
/home/…). Не заходьте вpublic_html— скрипт не має бути доступний із сайту. - + Folder → назва
zrazu-ssl→ Create New Folder. Зайдіть у неї. - + File → назва
update.sh→ Create New File. Виділіть файл → Edit, вставте текст нижче і натисніть Save Changes.
#!/bin/sh
# ZRAZU: оновлення SSL у cPanel за особистим посиланням. Запускається cron раз на добу.
set -eu
PULL="https://api.zrazu.com/ssl-pull/zsp_ВАШ_ТОКЕН"
DOMAIN="example.com"
UAPI=/usr/local/cpanel/bin/uapi
cd "$HOME/zrazu-ssl"
curl -fsS --retry 3 --max-time 60 -o cert.new "$PULL/cert.pem"
curl -fsS --retry 3 --max-time 60 -o chain.new "$PULL/chain.pem"
grep -q "BEGIN CERTIFICATE" cert.new || { echo "ZRAZU: за посиланням не сертифікат"; exit 1; }
if [ -f cert.applied ] && cmp -s cert.new cert.applied; then
echo "ZRAZU: сертифікат не змінився"
rm -f cert.new chain.new
exit 0
fi
enc() { perl -0777 -pe 's/([^A-Za-z0-9_.~-])/sprintf("%%%02X", ord($1))/seg' "$1"; }
out=$("$UAPI" --output=json SSL install_ssl domain="$DOMAIN" cert="$(enc cert.new)" cabundle="$(enc chain.new)")
if printf '%s' "$out" | grep -Eq '"status" *: *1'; then
mv -f cert.new cert.applied
rm -f chain.new
echo "ZRAZU: новий сертифікат встановлено"
else
echo "ZRAZU: cPanel не встановила сертифікат, відповідь:"
printf '%s\n' "$out"
exit 1
fi- Виділіть
update.sh→ Permissions → поставте700→ Change Permissions.
Крок 3. Розклад
- Відкрийте Advanced → Cron Jobs.
- Cron Email можна вказати свою пошту — тоді про кожну помилку прийде лист.
- У Add New Cron Job → Common Settings оберіть Once Per Minute (це лише для першої перевірки, у кроці 4 змінимо).
- Command:
/bin/sh $HOME/zrazu-ssl/update.sh >> $HOME/zrazu-ssl/log.txt 2>&1- Add New Cron Job.
Крок 4. Перевірка
- Зачекайте 2 хвилини і відкрийте у File Manager
zrazu-ssl/log.txt. Має бути «новий сертифікат встановлено», а далі — «сертифікат не змінився». - Поверніться в Cron Jobs, у списку задач натисніть Edit і змініть Common Settings на Once Per Day. Збережіть.
- Перевірте сайт: https://zrazu.com/tools/ssl/example.com/ — сертифікат ZRAZU і дата закінчення.
Щоб хостинг не замінив наш сертифікат
Багато хостингів на cPanel самі ставлять безкоштовний сертифікат (AutoSSL). Наш він за замовчуванням не чіпає, але якщо хостер це дозволив — відкрийте Security → SSL/TLS Status, позначте example.com і www.example.com і натисніть Exclude Domains from AutoSSL.
Якщо не вийшло
- У журналі
uapi: not foundчиPermission denied— хостинг закрив інструмент cPanel для скриптів. Тоді в Security → Manage API Tokens створіть токен, а в скрипті замініть рядок зout=$(…)на цей (ЛОГІН — ім'я входу в cPanel, СЕРВЕР — адреса, за якою ви заходите в cPanel, без:2083):
out=$(curl -fsS -H "Authorization: cpanel ЛОГІН:ТОКЕН" "https://СЕРВЕР:2083/execute/SSL/install_ssl" --data-urlencode "domain=$DOMAIN" --data-urlencode "cert@cert.new" --data-urlencode "cabundle@chain.new")- «cPanel не встановила сертифікат» і в відповіді про ключ (
private key) — у cPanel немає ключа до цього сертифіката. Повторіть крок 1 зі своїм ключем. curl: (22) … 404— посилання вимкнене чи замінене: створіть нове в картці сертифіката і замініть рядокPULL.