We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Автоматизированное управление сертификатами TLS/SSL через OpenSSL в Termux для мобильных серверов

Termux предоставляет полноценную Linux‑среду на Android‑устройствах, что делает его отличной площадкой для развертывания лёгких серверов (HTTP, SSH, VPN и т.д.). Одним из ключевых аспектов безопасной работы таких серверов является корректное управление TLS/SSL сертификатами. В этой статье мы рассмотрим, как полностью автоматизировать процесс создания, подписи и ротации сертификатов с помощью openssl и встроенного планировщика crond в Termux.

Подготовка окружения

Установим необходимые пакеты и настроим базовые пути.

pkg update && pkg upgrade -y
pkg install openssl cronie termux-api -y
mkdir -p $HOME/ssl/{private,certs,csr}
chmod 700 $HOME/ssl/private

Папка $HOME/ssl будет хранить все материалы: закрытые ключи, запросы сертификатов (CSR) и готовые сертификаты.

Создание корневого сертификата (CA)

Для автономного управления сертификатами удобно создать собственный центр сертификации (CA). Это позволяет подписывать сертификаты без обращения к внешним сервисам.

# Генерация закрытого ключа CA (RSA 4096 бит)
openssl genpkey -algorithm RSA -out $HOME/ssl/private/ca.key -pkeyopt rsa_keygen_bits:4096
chmod 600 $HOME/ssl/private/ca.key

# Самоподписанный сертификат CA (valid 10 лет)
openssl req -x509 -new -nodes -key $HOME/ssl/private/ca.key \
    -sha256 -days 3650 -out $HOME/ssl/certs/ca.crt \
    -subj "/C=RU/ST=Moscow/L=Moscow/O=RybinskLab/OU=MobileServers/CN=RybinskLab-CA"

Сохранённый сертификат ca.crt необходимо добавить в доверенные корни на клиентских устройствах, если вы планируете использовать его в публичных сервисах.

Шаблон скрипта для генерации серверного сертификата

Ниже представлен Bash‑скрипт generate_cert.sh, который автоматизирует процесс создания закрытого ключа, CSR и подписи сертификата CA.

#!/usr/bin/env bash

# Параметры (можно переопределить через переменные окружения)
DOMAIN=${1:-"example.com"}
DAYS=${2:-365}
KEY_DIR="$HOME/ssl/private"
CSR_DIR="$HOME/ssl/csr"
CERT_DIR="$HOME/ssl/certs"
CA_KEY="$KEY_DIR/ca.key"
CA_CERT="$CERT_DIR/ca.crt"

# Генерация закрытого ключа сервера (RSA 2048)
SERVER_KEY="$KEY_DIR/${DOMAIN}.key"
openssl genpkey -algorithm RSA -out "$SERVER_KEY" -pkeyopt rsa_keygen_bits:2048
chmod 600 "$SERVER_KEY"

# Создание CSR
SERVER_CSR="$CSR_DIR/${DOMAIN}.csr"
openssl req -new -key "$SERVER_KEY" -out "$SERVER_CSR" \
    -subj "/C=RU/ST=Moscow/L=Moscow/O=RybinskLab/OU=MobileServers/CN=${DOMAIN}"

# Подписание сертификата CA
SERVER_CERT="$CERT_DIR/${DOMAIN}.crt"
openssl x509 -req -in "$SERVER_CSR" -CA "$CA_CERT" -CAkey "$CA_KEY" \
    -CAcreateserial -out "$SERVER_CERT" -days "$DAYS" -sha256

# Вывод результатов
echo "Certificate generated: $SERVER_CERT"
 echo "Private key: $SERVER_KEY"

Сделайте скрипт исполняемым:

chmod +x $HOME/ssl/generate_cert.sh

Автоматическая ротация сертификатов

Для обеспечения непрерывной безопасности рекомендуется обновлять сертификаты за 30 дней до истечения срока их действия. В Termux это удобно реализовать через crond и небольшую обёртку.

# Файл: $HOME/ssl/renew_certs.sh
#!/usr/bin/env bash

# Список доменов, для которых требуется ротация (можно хранить в файле)
DOMAINS=("example.com" "api.example.com")

for d in "${DOMAINS[@]}"; do
    # Проверяем оставшееся время жизни сертификата (в днях)
    EXPIRY=$(openssl x509 -enddate -noout -in "$HOME/ssl/certs/${d}.crt" | cut -d= -f2)
    EXPIRY_TS=$(date -d "$EXPIRY" +%s)
    NOW_TS=$(date +%s)
    DAYS_LEFT=$(( (EXPIRY_TS - NOW_TS) / 86400 ))
    if [ "$DAYS_LEFT" -le 30 ]; then
        echo "[$(date)] Renewing $d (expires in $DAYS_LEFT days)"
        $HOME/ssl/generate_cert.sh "$d" 365
        # Перезапуск сервиса (пример для nginx)
        termux-notification --title "RybinskLab" --content "Certificate for $d renewed, restarting nginx"
        # Пример команды рестарта (зависит от установленного сервера)
        # pkill -f nginx && nginx
    else
        echo "[$(date)] $d is still valid ($DAYS_LEFT days left)"
    fi
done

Сделайте скрипт исполняемым:

chmod +x $HOME/ssl/renew_certs.sh

Добавьте задачу в crontab (только один раз):

crontab -e
# Добавьте строку (каждый день в 03:00)
0 3   * $HOME/ssl/renew_certs.sh >> $HOME/ssl/renew.log 2>&1

Запустите демон crond и убедитесь, что он будет автоматически стартовать после перезагрузки Termux:

sv-enable crond
sv up crond

Интеграция с мобильными приложениями и API

Termux‑API позволяет отправлять уведомления, записывать логи в системный журнал и даже управлять Wi‑Fi. Пример отправки уведомления после успешного обновления сертификата уже показан выше. При необходимости можно добавить отправку POST‑запроса в ваш мониторинговый сервис:

curl -X POST -H "Content-Type: application/json" \
    -d '{"host":"${d}","status":"renewed","timestamp":"$(date +%s)"}' \
    https://monitor.rlb.io/certificates

Лучшие практики безопасности

  • Храните закрытые ключи в директории с правом 700 и ограничьте доступ к Termux (пароль/биометрия).
  • Регулярно бэкапьте ca.key и все серверные ключи в зашифрованный архив (openssl enc -aes-256-cbc).
  • Используйте отдельный пользователь (в Termux это можно эмулировать через proot) для изоляции сервисов.
  • Включайте проверку отзыва сертификатов (OCSP) в клиентских приложениях.

Отладка и проверка

Проверить корректность сертификата можно командой:

openssl s_client -connect localhost:443 -servername example.com -showcerts

Для более глубокого анализа используйте openssl x509 -text -noout -in … и сравните поля Not After и Subject.

Заключение

Автоматизация управления TLS/SSL сертификатами в Termux открывает новые возможности для развертывания полноценного веб‑инфраструктурного стека непосредственно на Android‑устройствах. С помощью openssl, crond и Termux‑API вы получаете гибкую, безопасную и полностью кастомизируемую систему, которая легко интегрируется в существующие DevOps‑процессы.

Если вам требуется профессиональная настройка мобильных серверов, аудит безопасности или разработка кастомных скриптов под Termux, команда RybinskLab готова помочь. Мы предоставляем услуги по консалтингу, настройке CI/CD, а также поддержке и мониторингу ваших мобильных инфраструктур.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен экспертом РыбинскЛАБ.

Поделиться знанием:

Нужна профессиональная помощь?

Меня зовут Усачёв Денис Евгеньевич. Я оказываю ИТ-услуги в Рыбинске и Ярославской области: настройка серверов, безопасность, автоматизация бизнеса. Запомните информация развлекательный ознакомительный носит, не нарушайте закон!

Связаться со мной
Поддержать проект