Использование acme в Linux

Automatic Certificate Management Environment (ACME) - Протокол среды автоматического управления сертификатами - это коммуникационный протокол для автоматизации взаимодействия между центрами сертификации и серверами их пользователей, позволяющий автоматизировать развертывание инфраструктуры открытых ключей при очень низких затратаx

    Пример использования acme.sh
    vim genssl.sh #!/bin/bash action="$1" host="$2" mail="$3" dir="$4" folder="$5" Help() { echo "#Установить и сгенерировать сертификат" echo "genssl -c" echo "**************************************" echo "Обновить сертификат" echo "genssl -u" echo "**************************************" echo "Справка по командам" echo "genssl -h" echo "**************************************" } CheckDir() { if [ -d "${1}" ] then return 0 else return 1 fi } CheckDomain() { regex="^([a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]\.)+[a-zA-Z]{2,}$" if [[ "$1" =~ $regex ]] then return 0 else return 1 fi } CheckMail() { regex="^[a-z0-9!#\$%&'*+/=?^_\`{|}~-]+(\.[a-z0-9!#$%&'*+/=?^_\`{|}~-]+)*@([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]([a-z0-9-]*[a-z0-9])?\$" if [[ "$1" =~ $regex ]] then return 0 else return 1 fi } #Установить acme.sh InstallACME() { #Создать директории для токенов mkdir -p "${dir}/.well-known/acme-challenge" chown -R www-data:www-data "${dir}/.well-known" #Создать директорию и файл для логов mkdir -p /var/lib/acme.sh/log log_file="/var/lib/acme.sh/log/acme.log" if [ ! -f $log_file ] then touch /var/lib/acme.sh/log/acme.log fi #install acme.sh git clone https://github.com/acmesh-official/acme.sh.git cd ./acme.sh #for linux alpine #apk add acme.sh if [[ -n "${mail}" ]] then #Настройка окружения ./acme.sh --install-online --home "/var/lib/acme.sh" --config-home "/var/lib/acme.sh" \ --log "/var/lib/acme.sh/log/acme.log" --cert-home "/var/lib/acme.sh" --server letsencrypt #Создание аккаунта ./acme.sh --home "/var/lib/acme.sh" --config-home "/var/lib/acme.sh" --server letsencrypt --register-account -m "${mail}" else echo "Не указан email" exit 1 fi cd ../ rm -rf ./acme.sh #apk del acme.sh } #Сгенерировать сертификат LE AddSsl() { if [[ -n "${host}" ]] then echo "Сгенерировать сертификат для домена ${host}" /var/lib/acme.sh/acme.sh --issue --force --debug -d "${host}" --server letsencrypt -w "${dir}" \ --home "/var/lib/acme.sh" --config-home "/var/lib/acme.sh" \ --fullchain-file "/etc/nginx/${folder}.crt" --key-file "/etc/nginx/${folder}.key" \ --reloadcmd "nginx -t && rc-service nginx restart" /var/lib/acme.sh/acme.sh --home "/var/lib/acme.sh" --config-home "/var/lib/acme.sh" --install-cronjob else echo "Домен не определен" fi } #Обновить сертификат UpdateSsl() { if [[ -n "${host}" ]] then echo "Обновить сертификат для домена ${host}" /var/lib/acme.sh/acme.sh --renew --force --debug -d "${host}" --server letsencrypt -w "${dir}" \ --home "/var/lib/acme.sh" --config-home "/var/lib/acme.sh" \ --fullchain-file "/etc/nginx/${folder}.crt" --key-file "/etc/nginx/${folder}.key" \ --reloadcmd "nginx -t && rc-service nginx restart" /var/lib/acme.sh/acme.sh --home "/var/lib/acme.sh" --config-home "/var/lib/acme.sh" --install-cronjob else echo "Домен не определен" fi } InsertData() { echo "Введите имя домена" read host_name echo "Введите путь корневому каталогу сайта" read root_dir echo "Введите вашу почту для создания аккаунта" read mail_user if CheckDir $root_dir then dir=$root_dir else echo "Директория ${root_dir} не существует" exit 1; fi if CheckDomain $host_name then host=$host_name else echo "Неккоректное имя домена ${host_name}" exit 1; fi if CheckMail $mail_user then mail=$mail_user else echo "Некорректное имя почтового ящика ${mail_user}" exit 1; fi folder=`echo $host | awk -F '.' '{print $1}'` } while getopts "cuh" opt do case "${opt}" in c ) InsertData; InstallACME; AddSsl ;; u ) InsertData; UpdateSsl ;; h ) Help ;; * ) Help ;; esac done

    #Скрипт создает файлы сертификата и ключа в директории /etc/nginx/
    #Поэтому необходимо заранее прописать путь к файлам в секции https
    #Сертификат не сгенерится и не обновится, если закрыт порт 80 и 443
    #После успешной установки будет создан файл с переменными окружения /var/lib/acme.sh/acme.sh.env
    #export LE_WORKING_DIR="/var/lib/acme.sh"
    #export LE_CONFIG_HOME="/var/lib/acme.sh"
    #alias acme.sh="/var/lib/acme.sh/acme.sh --config-home '/var/lib/acme.sh'"
    #
    #В процессе установки должно быть добавлено задание в крон
    #38 0 * * * "/var/lib/acme.sh"/acme.sh --cron --home "/var/lib/acme.sh" --config-home "/var/lib/acme.sh" > /dev/null

    #В следующем файле хранится конфигурация для конкрентного домена
    #/var/lib/acme.sh/netbash.ru_ecc/netbash.ru.conf
    #Например
    #Le_NextRenewTimeStr - дата следующего обновления
    #Le_RealKeyPath - куда копируется приватный ключ после создания или обновления сертификата домена
    #Le_Webroot - корневая директория сайта
    #и др.

    #В конфигурации nginx для сайта необходимо добавить location, если доступ ограничен
    #Пример

    location /.well-known/acme-challenge/{ alias /var/www/netbash/.well-known/acme-challenge/; default_type text/plain; }
    Дополнительные опции
    #Справка по командам #acme.sh -h #Установить LE в /root/ #acme.sh --upgrade #Создание учетной записи #acme.sh --register-account --server letsencrypt -m 89261969132@mail.ru #Список установленных сертификатов #acme.sh --list #Текущая корфигурация acme #acme.sh --info #Обновить данные аккаунта #--update-account # -m, --email email Specifies the account email, only valid for the '--install' and '--update-account' # --key-file file Куда будет скопирован приватный ключ в процессе установки # --fullchain-file file Куда будет скопирован файлы с полной цепочкой сертификата # --reloadcmd command Команда, которая будет выполнена после генерации или обновления сертификатов #--install-cronjob добавить задание в крон, которое будет обновлять все сертификаты в домашней директории acme.sh #--uninstall-cronjob Uninstall the cron job. The 'uninstall' command can do this automatically. #--account conf file Specifies a customized account config file. #--home directory Specifies the home dir for acme.sh. #--cert-home directory Указывает домашнюю директорию для сертификатов, актуально для опции --install #--config-home directory Указывает на каталог с конфигурацией
    Источники
    Последнее изменение: 10.03.2026 23:05


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ