acme.sh — открытый bash-скрипт (~3000 строк), реализующий клиент протокола ACME (Automated Certificate Management Environment, RFC 8555). Создан Нилом Пэном (neil) в 2015 году. Основная альтернатива certbot от EFF с более низкими системными требованиями: работает на любом UNIX с bash и curl без Python.
Как работает
acme.sh получает сертификат через три метода верификации:
- Webroot — помещает файл-токен в директорию веб-сервера.
- Standalone — запускает временный веб-сервер на порту 80.
- DNS API — автоматически добавляет TXT-запись через API регистратора (поддерживается 150+ DNS-провайдеров). Обязателен для Wildcard-сертификатов.
После получения сертификата скрипт устанавливает cron-задачу для автоматического обновления (по умолчанию каждые 60 дней для Let's Encrypt с 90-дневным сроком).
Поддерживаемые CA
- Let's Encrypt (по умолчанию)
- ZeroSSL — бесплатный альтернативный CA
- Buypass Go SSL
- SSL.com
- Любой ACME-совместимый CA
История
acme.sh создан в 2015 году параллельно с запуском Let's Encrypt. В 2016 году ACME стандартизирован в RFC 8555. acme.sh стал популярен благодаря минимализму: никаких pip, virtualenv, systemd. К 2024 году у репозитория на GitHub более 38 000 звёзд, что делает его одним из наиболее используемых ACME-клиентов.
Связь с хостингом
На серверах с нестандартной конфигурацией (не Ubuntu с apt) acme.sh проще установить, чем certbot. DNS-режим позволяет выпускать Wildcard-сертификаты (*.example.com) для Nginx или Apache без перезагрузки веб-сервера. Пример использования для Nginx:
acme.sh --issue -d example.com -d www.example.com --nginx
acme.sh --install-cert -d example.com --key-file /etc/nginx/ssl/key.pem --fullchain-file /etc/nginx/ssl/cert.pem --reloadcmd "systemctl reload nginx"
acme.sh в практике
acme.sh — shell-скрипт (~2000 строк bash), реализующий ACME-протокол для автоматического получения SSL-сертификатов. Особенности: работает без зависимостей (только bash, openssl, curl), поддерживает 150+ DNS-провайдеров для DNS-01 challenge (включая reg.ru, Cloudflare, Yandex Cloud), автоматически устанавливает cron-задачу для продления. Пример получения сертификата: acme.sh --issue -d example.com --webroot /var/www/html. Для Wildcard-сертификатов нужен DNS-01: acme.sh --issue -d "*.example.com" --dns dns_cf (через Cloudflare API).
acme.sh vs Certbot
Certbot -- официальный клиент EFF для Let's Encrypt, написан на Python. acme.sh -- более портативный bash-скрипт без зависимостей от Python. Certbot лучше интегрируется с Nginx/Apache через плагины (автоматически правит конфиги), acme.sh -- более гибкий для нестандартных конфигураций и DNS API. Оба поддерживают ZeroSSL и Let's Encrypt как CA. На серверах без пакетного менеджера или с минимальной установкой acme.sh предпочтительнее. DV-сертификаты через оба инструмента получаются за 1--2 минуты.
История acme.sh
acme.sh создал Neil Pang (neilpang на GitHub) в 2015 году, когда Let's Encrypt только запустился. Первоначально назывался le.sh. Переименован в acme.sh в 2016 году. Сегодня имеет более 35 000 звёзд на GitHub и является одним из самых популярных ACME-клиентов в мире. Поддерживает ACME v1 (устаревший) и v2 (RFC 8555, 2019). Официально рекомендован несколькими CA как альтернативный клиент.