SSL-сертификаты · 6 min read · Feb 04, 2026

Начало работы с клиентом SSL Let's Encrypt acme.sh

Acme.sh — это простой, мощный и удобный клиент протокола ACME, написанный исключительно на языке Shell (Unix shell), совместимый с оболочками bash, dash и sh. Он помогает управлять установкой, продлением и аннулированием SSL-сертификатов. Он поддерживает протоколы ACME версии 1 и версии 2, а также сертификаты ACME v2 с подстановочными знаками. Будучи клиентом ACME без зависимостей, он становится еще лучше. Вам не нужно скачивать и устанавливать весь интернет, чтобы запустить его. Инструмент не требует прав root или sudo, но рекомендуется использовать root.

Acme.sh поддерживает следующие методы проверки, которые вы можете использовать для подтверждения владения доменом:

  • Режим webroot
  • Режим standalone
  • Режим standalone tls-alpn
  • Режим Apache
  • Режим Nginx
  • Режим DNS
  • Режим DNS alias
  • Stateless режим

Что такое 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 и установить:

git clone https://github.com/Neilpang/acme.sh.git  
cd ./acme.sh  
./acme.sh --install  
source ~/.bashrc

Установщик выполнит 3 действия:

  1. Создаст и скопирует acme.sh в вашу домашнюю директорию ( $HOME): ~/.acme.sh/. Все сертификаты также будут помещены в эту папку.
  2. Создаст псевдоним для: acme.sh=~/.acme.sh/acme.sh.
  3. Создаст ежедневную задачу 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 "[email protected]" \  
          --accountkey ~/myaccount.key \  
          --accountconf ~/myaccount.conf \  
          --useragent "this is my client."

Вам не нужно устанавливать все параметры, просто установите те, которые вам важны.

Объяснение параметров:

  • --home — это пользовательская директория для установки acme.sh. По умолчанию он устанавливается в ~/.acme.sh.
  • --config-home — это записываемая папка, acme.sh будет записывать все файлы (включая сертификаты/ключи, конфигурации) туда. По умолчанию это --home.
  • --cert-home — это пользовательская директория для сохранения выданных сертификатов. По умолчанию они сохраняются в --config-home.
  • --accountemail — это электронная почта, используемая для регистрации аккаунта в Let’s Encrypt, вы будете получать уведомления о продлении на этот адрес. По умолчанию пусто.
  • --accountkey — это файл, в котором хранится ваш закрытый ключ аккаунта. По умолчанию он сохраняется в --config-home.
  • --useragent — это значение заголовка user-agent, используемое для отправки в 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 свободен, тогда вы можете использовать режим standalone. Если вы хотите использовать этот режим, вам сначала нужно установить инструменты 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 свободен. Вы можете использовать режим standalone TLS ALPN. Acme.sh имеет встроенный standalone 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 может использовать API для автоматического добавления записи DNS TXT для вас. Ваш сертификат будет автоматически выдан и продлен. Не требуется ручная работа. Перед запросом сертификатов настройте свои API ключи и электронную почту. В настоящее время acme.sh имеет автоматическую интеграцию DNS примерно с 60 провайдерами DNS и может использовать инструмент Lexicon для тех, кто не поддерживается нативно.

Один домен + Режим CloudFlare DNS API:

export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"  
export CF_Email="[email protected]"  
acme.sh --issue -d example.com --dns dns_cf  

Сертификат с подстановочным знаком + Режим CloudFlare DNS API:

export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"  
export CF_Email="[email protected]"  
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

После генерации сертификатов вы, вероятно, захотите установить/скопировать выданные сертификаты в правильное место на диске. Вы должны использовать эту команду для копирования сертификатов в целевые файлы, не используйте файлы сертификатов в папке ~/.acme.sh/, они предназначены только для внутреннего использования, структура папок может измениться в будущем. Перед установкой создайте разумную директорию для хранения ваших сертификатов. Это может быть /etc/letsencrypt, /etc/nginx/ssl или /etc/apache2/ssl, в зависимости от вашего веб-серверного программного обеспечения и ваших собственных предпочтений для хранения связанных с SSL данных.

Пример для Apache:

acme.sh --install-cert \  
        --domain example.com \   
        --cert-file /path/to/cert/cert.pem \  
        --key-file /path/to/keyfile/key.pem \  
        --fullchain-file /path/to/fullchain/fullchain.pem \  
        --reloadcmd "sudo systemctl reload apache2.service"

Пример для Nginx:

acme.sh --install-cert \  
        --domain example.com \   
        --cert-file /path/to/cert/cert.pem \  
        --key-file /path/to/keyfile/key.pem \  
        --fullchain-file /path/to/fullchain/fullchain.pem \  
        --reloadcmd "sudo systemctl reload nginx.service"

Параметры хранятся в конфигурационном файле .acme.sh, поэтому вам нужно правильно настроить его для вашей системы, так как этот файл читается, когда задача cron выполняет продление. “reloadcmd” зависит от вашей операционной системы и системы инициализации.

Продление 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 будет автоматически обновляться.

Вот и все. Если у вас возникли трудности, посетите страницу вики acme.sh по адресу https://github.com/Neilpang/acme.sh/wiki.

Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.