Acme.sh – это простой, мощный и простой в использовании клиент протокола ACME, написанный исключительно на языке оболочки (оболочка Unix), совместимый с оболочками bash, dash и sh.
Помогает управлять установкой, продлением, отзывом SSL-сертификатов.
Он поддерживает протоколы ACME версии 1 и ACME версии 2, а также сертификаты подстановочных знаков ACME v2.
Клиент ACME с нулевой зависимостью делает его еще лучше.
Вам не нужно скачивать и устанавливать весь интернет, чтобы он работал.
Инструмент не требует доступа root или sudo, но рекомендуется использовать root.
Acme.sh поддерживает следующие методы проверки, которые можно использовать для подтверждения владения доменом:
- Webroot mode
- Standalone mode
- Standalone tls-alpn mode
- Apache mode
- Nginx mode
- DNS mode
- DNS alias mode
- Stateless mode
Что такое Let’s Encrypt ?
Let’s Encrypt (LE) – это центр сертификации (CA) и проект, который предлагает бесплатные и автоматические сертификаты SSL / TLS с целью шифрования всей сети.
Если вы владеете доменным именем и имеете доступ к серверу через оболочку, вы можете использовать Let’s Encrypt, чтобы получить доверенный сертификат бесплатно.
Let’s Encrypt может выдавать сертификаты SAN для 100 имен хостов и групповых сертификатов.
Все сертификаты действительны в течение 90 дней.
Использование Acme.sh и основные команды
В этом разделе я покажу некоторые из наиболее распространенных команд и опций acme.sh.
Установка Acme.sh
У вас есть несколько вариантов установки acme.sh.
Установить из Интернета с помощью curl или wget:
curl https://get.acme.sh | sh
source ~/.bashrc
или
wget -O - https://get.acme.sh | sh
source ~/.bashrc
Установка из GitHub:
curl https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh | INSTALLONLINE=1 sh
или
wget -O - https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh | INSTALLONLINE=1 sh
Git clone и установка:
git clone https://github.com/Neilpang/acme.sh.git
cd ./acme.sh
./acme.sh --install
source ~/.bashrc
Установщик выполнит 3 действия:
- Создаст и скопирует файл acme.sh в вашу домашнюю директорию ($ HOME): ~/.acme.sh/. Все сертификаты также будут помещены в эту папку.
- Создаст алиас для: acme.sh = ~/.acme.sh/acme.sh.
- Создаст ежедневную работу cron для проверки и обновления сертификатов, если это необходимо.
Расширенная установка
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install \
--home ~/myacme \
--config-home ~/myacme/data \
--cert-home ~/mycerts \
--accountemail "hi@acme.sh" \
--accountkey ~/myaccount.key \
--accountconf ~/myaccount.conf \
--useragent "this is my client."
Вам не нужно устанавливать все параметры, просто установите те, которые вам нужны.
Объяснение вариантов:
–home – это пользовательский каталог для установки acme.sh. По умолчанию он устанавливается в ~/.acme.sh.
–config-home является записываемой папкой, acme.sh запишет туда все файлы (включая cert / keys, config). По умолчанию это в –home.
–cert-home – это специальный каталог для сохранения выдаваемых вами сертификатов. По умолчанию он сохраняется в –config-home.
–accountemail – это адрес электронной почты, используемый для регистрации учетной записи в Let’s Encrypt, вы получите уведомление об обновлении сюда. По умолчанию пусто.
–accountkey – файл, сохраняющий закрытый ключ вашей учетной записи. По умолчанию он сохраняется в –config-home.
–useragent – значение заголовка агента пользователя, используемое для отправки в Let’s Encrypt.
После завершения установки вы можете проверить это, проверив версию acme.sh:
acme.sh --version
# v2.8.1
В программе много команд и параметров, которые можно использовать.
Чтобы получить помощь, вы можете запустить:
acme.sh --help
Выдать сертификат SSL
Если у вас уже работает веб-сервер, вы должны использовать режим webroot.
Вам понадобится доступ для записи в корневой веб-папке.
Вот несколько примеров команд, которые можно использовать для получения сертификата в режиме webroot:
Один домен + режим Webroot:
acme.sh --issue -d example.com --webroot /var/www/example.com
Несколько доменов с одним сертификатом + Webroot:
acme.sh --issue -d example.com -d www.example.com -d mail.example.com --webroot /var/www/example.com
Сертификат ECC / ECDSA для одного домена + режим Webroot:
acme.sh --issue -d example.com --webroot /var/www/example.com --keylength ec-256
Несколько доменов с одним сертификатом ECC / ECDSA + режим Webroot:
acme.sh --issue -d example.com -d www.example.com -d mail.example.com --webroot /var/www/example.com --keylength ec-256
Допустимые значения для –keylength: 2048 (по умолчанию), 3072, 4096, 8192 или ec-256, ec-384.
Если у вас нет веб-сервера, возможно, вы используете SMTP или FTP-сервер, порт 80 свободен, тогда вы можете использовать автономный режим.
Если вы хотите использовать этот режим, вам сначала нужно установить инструменты socat.
Один домен + Standalone режим:
acme.sh --issue -d example.com --standalone
Несколько доменов с одним сертификатом + Standalone режим:
acme.sh --issue -d example.com -d www.example.com -d mail.example.com --standalone
Если у вас нет веб-сервера, возможно, вы используете SMTP или FTP-сервер, порт 443 свободен.
Вы можете использовать автономный режим TLS ALPN. Acme.sh имеет встроенный автономный веб-сервер TLS, он может прослушивать порт 443 для выдачи сертификата.
Один домен + Standalone режим TLS ALPN:
acme.sh --issue -d example.com --alpn
Несколько доменов с одним сертификатом + Standaloneй режим TLS ALPN:
acme.sh --issue -d example.com -d www.example.com --alpn
Автоматическая интеграция DNS API
Если у вашего DNS-провайдера есть API, acme.sh может использовать его для автоматического добавления записи DNS TXT.
Ваш сертификат будет автоматически выдан и продлен.
Ручной работы не требуется.
Прежде чем запрашивать сертификаты, настройте ключи API и адрес электронной почты.
В настоящее время acme.sh имеет встроенную автоматическую DNS-интеграцию с около 60 DNS-провайдерами и может использовать инструмент Lexicon для тех, кто не поддерживается изначально.
Один домен + CloudFlare DNS API режим:
export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export CF_Email="xxxx@sss.com"
acme.sh --issue -d example.com --dns dns_cf
Wildcard сертификат + режим CloudFlare DNS API:
export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export CF_Email="xxxx@sss.com"
acme.sh --issue -d example.com -d '*.example.com' --dns dns_cf
Если ваш DNS-провайдер не поддерживает доступ через API, вы можете добавить запись TXT вручную.
acme.sh --issue --dns -d example.com -d www.example.com -d cp.example.com
Вы должны получить вывод, как показано ниже:
Add the following txt record:
Domain:_acme-challenge.example.com
Txt value:9ihDbjYfTExAYeDs4DBUeuTo18KBzwvTEjUnSwd32-c
Add the following txt record:
Domain:_acme-challenge.www.example.com
Txt value:9ihDbjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Please add those txt records to the domains. Waiting for the dns to take effect.
Затем просто повторите с аргументом renew:
acme.sh --renew -d example.com
Помните, что это ручной режим DNS, и вы не можете автоматически продлевать свои сертификаты.
Вам нужно будет добавить новую запись TXT в свой домен вручную, когда придет время продлевать сертификаты.
Поэтому вместо этого используйте режим DNS API, потому что он может быть автоматизирован.
Обновление SSL-сертификатов Let’s Encrypt
Вам не нужно обновлять сертификаты вручную.
Все сертификаты будут обновляться автоматически каждые 60 дней.
Однако вы также можете принудительно обновить сертификат:
acme.sh --renew -d example.com --force
или для сертификата ECC:
acme.sh --renew -d example.com --force --ecc
Как обновить acme.sh
Вы можете обновить acme.sh до последнего выпуска с помощью:
acme.sh --upgrade
Вы также можете включить автоматическое обновление:
acme.sh --upgrade --auto-upgrade
Тогда acme.sh будет обновляться автоматически.
Здравствуйте.
Скажите, что означает фраза: “Создаст ежедневную работу cron для проверки и обновления сертификатов, если это необходимо.”
Кому это необходимо? Мне (на всякий случай)? Или сертификату? А тогда зачем ему каждый день самого себя проверять? Вроде бы у него самого должна быть где-то прописана дата окончания сертификата и он должен эту дату знать…
Добрый день!
Так сертификат может быть отозван, а не только просрочен
Ну и к чему этот перевод официального дока? Можно было и типичные ошибки разобрать, например. А так это фуфло, а не статья.
Спасибо за отзыв 🙂