20
Июн

Сертификат Let’s Encrypt с Mikrotik для Torrserver

В прошлой статье мы генерировали сертификат Let’s Encrypt скриптом на роутере Mikrotik RB4011. Наш скрипт проверял есть ли сертификат, сколько дней до окончания. И если меньше 30 дней, мы удаляли текущий сертификат и получали новый. Всё это логировали и отправляли результат в Telegram бота.

Сейчас мы таким же способом проверим срок сертификата и если он валидный, выгрузим его на устройство для использовании в TorrServer. В данном случае это спутниковый ресивер VU+ Ultimo 4K

:global botToken
:global chatID
:global dnsName "hd.zp.ua"
:global minDaysLeft 60

:global certFound false
:global expireDate ""
:global certID ""

/log info "$dnsName: ищем сертификат..."
:foreach cert in=[/certificate find where common-name=$dnsName and issuer~"Let's Encrypt"] do={
    :set certFound true
    :set certID $cert
    :set expireDate [/certificate get $cert invalid-after]
    /log info "$dnsName: сертификат найден, ID $certID, истекает $expireDate"
}

:if ($certFound) do={

    :local expireTime [:totime $expireDate]
    :local nowTime [:totime ([/system clock get date] . " " . [/system clock get time])]
    :local deltaStr [:tostr ($expireTime - $nowTime)]
    :local totalDays 0

    :if ([:find $deltaStr "w"] != nil) do={
        :set totalDays ($totalDays + ([:pick $deltaStr 0 [:find $deltaStr "w"]] * 7))
        :set deltaStr [:pick $deltaStr ([:find $deltaStr "w"] + 1) [:len $deltaStr]]
    }
    :if ([:find $deltaStr "d"] != nil) do={
        :set totalDays ($totalDays + [:pick $deltaStr 0 [:find $deltaStr "d"]])
    }

    /log info "$dnsName: осталось $totalDays дней до окончания действия сертификата"

    :if ($totalDays < $minDaysLeft) do={

        :local msg "$dnsName: certificate expired or close to expire \E2\9D\8C"
        /tool fetch url="https://api.telegram.org/bot$botToken/sendMessage?chat_id=$chatID&text=$msg" keep-result=no
        /log warning "$dnsName: сертификат скоро истекает или истёк"

    } else={

        /log info "$dnsName: экспортируем сертификат в $pemPath"
        /certificate export-certificate $certID export-passphrase=mypassword type=pkcs12 file-name=max-cert

        :delay 2
        /log info "$dnsName: сертификат успешно экспортирован срок $totalDays"

        :local msg "$dnsName: certificate valid and exported  $totalDays days \E2\9C\85"
        /tool fetch url="https://api.telegram.org/bot$botToken/sendMessage?chat_id=$chatID&text=$msg" keep-result=no
    }

} else={

    :local msg "$dnsName: certificate not found \E2\84\B9"
    /tool fetch url="https://api.telegram.org/bot$botToken/sendMessage?chat_id=$chatID&text=$msg" keep-result=no
    /log warning "$dnsName: сертификат не найден"
}

export-passphrase=mypassword — тут любой пароль

Дальше скрипт для устройства где установлен TorrServer

#!/bin/sh
# Пути
CERT_PATH="/hdd"
CERT_FILE="max-cert.p12"
FULL_PEM="$CERT_PATH/full.pem"
KEY_FILE="$CERT_PATH/server.key"
PEM_FILE="$CERT_PATH/server.pem"

# Торрент-сервер
TORR_SERVER="/usr/bin/TorrServer"

# Скачиваем P12
if wget ftp://root:[email protected]/$CERT_FILE -O $CERT_PATH/$CERT_FILE; then
    telegram-send "Сертификат успешно загружен"

    # Извлекаем PEM
    openssl pkcs12 -in $CERT_PATH/$CERT_FILE -out $FULL_PEM -nodes -passin pass:mypassword

    # Извлекаем ключ
    awk 'BEGIN {p=0} /BEGIN PRIVATE KEY/ {p=1} p; /END PRIVATE KEY/ {p=0}' $FULL_PEM > $KEY_FILE

    # Извлекаем первый сертификат
    awk 'BEGIN {p=0} /BEGIN CERTIFICATE/ {p=1} p; /END CERTIFICATE/ {if (++i==1) p=0}' $FULL_PEM > $PEM_FILE

    # Удаляем временный файл
    rm -f $FULL_PEM

    telegram-send "Сертификат и ключ успешно извлечены. Перезапускаю TorrServer"

    # Завершаем предыдущий процесс TorrServer
    pkill -f "$TORR_SERVER"

    # Запуск нового экземпляра
    telegram-send "Запускаю TorrServer"
    $TORR_SERVER --httpauth --path /hdd --ssl --sslcert $PEM_FILE --sslkey $KEY_FILE --dontkill &

else
    telegram-send "Ошибка загрузки сертификата"
fi

ftp://root:[email protected] — логин и пароль к вашему роутеру Mikrotik
pass:mypassword — пароль к сертификату

Обратная связь

    The average number of adverse effects was 3. T max is 23 minutes in females and 32 minutes in males. What other drugs will affect doxercalciferol Viagra natural sin receta. Archived from the original on 2009-08-14.

    Talk to your doctor before using this form of cefadroxil if you have diabetes. What should I tell my healthcare team before starting CABLIVI? There is no FDA guidance on the use of Tetracycline (oral) with respect to specific gender populations https://www.apotheke-rezeptfreie.com/. Opper K, Uder S, Song K Development of Heterogeneous and Homogeneous Platforms for Rapid Analysis of DNA-Protein Interactions.

    Contact Us