Безкоштовний SSL-сертифікат ZeroSSL через acme.sh

ZeroSSL — центр сертифікації, який, як і Let’s Encrypt, видає безкоштовні SSL-сертифікати на 90 днів за протоколом ACME. Він стане в пригоді як альтернатива або резервний варіант, якщо Let’s Encrypt недоступний або ви вперлися в його ліміти.
Два способи отримати сертифікат
- Через сайт zerossl.com. Підходить для разового випуску, але в безкоштовному тарифі доступно лише три сертифікати, і продовжувати їх потрібно вручну.
- Через ACME-клієнт. Кількість сертифікатів не обмежена, продовження автоматичне. Це правильний варіант для сервера.
Далі використовується клієнт acme.sh: це один скрипт на Bash без залежностей, і ZeroSSL у ньому — типовий центр сертифікації.
Крок 1. Встановлення acme.sh
curl https://get.acme.sh | sh -s email=you@example.com
Вкажіть робочу адресу: на неї зареєструється обліковий запис ZeroSSL. Інсталятор створить каталог ~/.acme.sh і завдання cron для щоденної перевірки продовження. Перечитайте налаштування оболонки:
source ~/.bashrc
Крок 2. Випуск сертифіката
Домен має вказувати на IP-адресу сервера, а порт 80 — бути доступним з інтернету. Оберіть спосіб перевірки домену.
Сайт уже працює на Nginx:
acme.sh --issue -d example.com -d www.example.com --nginx
Сайт на Apache:
acme.sh --issue -d example.com -d www.example.com --apache
Будь-який вебсервер, через каталог сайту:
acme.sh --issue -d example.com -d www.example.com -w /var/www/example.com
Вебсервера немає (acme.sh сам тимчасово займе порт 80, потрібен пакет socat):
acme.sh --issue -d example.com --standalone
Крок 3. Встановлення сертифіката
Не використовуйте файли безпосередньо з ~/.acme.sh: їхнє розташування може змінитися. Скопіюйте сертифікат у постійне місце спеціальною командою — вона ж запам’ятає, як перезавантажувати вебсервер після продовження:
acme.sh --install-cert -d example.com \
--key-file /etc/ssl/private/example.com.key \
--fullchain-file /etc/ssl/certs/example.com.crt \
--reloadcmd "systemctl reload nginx"
Крок 4. Підключення в Nginx
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
root /var/www/example.com;
}
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
sudo nginx -t && sudo systemctl reload nginx
У версіях Nginx до 1.25.1 замість рядка http2 on; використовується запис listen 443 ssl http2;.
Wildcard-сертифікат
Сертифікат для всіх піддоменів (*.example.com) випускається лише з перевіркою через DNS. acme.sh уміє сам створювати потрібний запис через API більшості DNS-провайдерів. Приклад для Cloudflare:
export CF_Token="токен_api"
acme.sh --issue -d example.com -d '*.example.com' --dns dns_cf
Список підтримуваних провайдерів і назви змінних є в документації acme.sh.
Продовження та керування
Продовження виконується автоматично через cron. Корисні команди:
acme.sh --list # усі сертифікати й дати продовження
acme.sh --renew -d example.com --force # продовжити примусово
acme.sh --remove -d example.com # припинити продовження
acme.sh --upgrade # оновити сам клієнт
Перемикання на Let’s Encrypt
Центр сертифікації можна змінити однією командою — клієнт і всі налаштування залишаться тими самими:
acme.sh --set-default-ca --server letsencrypt
Повернутися назад: --server zerossl. Для окремого сертифіката центр задається ключем --server у команді --issue.
ZeroSSL чи Let’s Encrypt
Для відвідувачів сайту різниці немає: обидва сертифікати довірені всіма браузерами. ZeroSSL зручний як запасний центр сертифікації й не має жорстких тижневих лімітів на домен. Let’s Encrypt звичніший і краще підтримується готовими інструментами на кшталт Certbot — він використовується в статті про налаштування віртуальних хостів Nginx.
Відеоінструкція



