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.