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

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

Создание и управление собственным PKI в Termux с OpenSSL

Public Key Infrastructure (PKI) – фундаментальная часть любой системы, где требуется шифрование и аутентификация. В Termux, мощном терминальном эмуляторе для Android, можно развернуть полностью автономную PKI, используя лишь openssl. В этой статье мы пройдем от установки до полного жизненного цикла сертификатов.

Что понадобится

  • Устройство под управлением Android с установленным Termux.
  • Доступ к интернету для установки пакетов.
  • Базовые знания работы в командной строке.

Установка OpenSSL в Termux

pkg update && pkg upgrade -y
pkg install openssl -y

После установки проверьте версию:

openssl version

Организация каталогов PKI

Структура каталогов упрощает управление сертификатами и ключами.

mkdir -p ~/pki/{root,intermediate,certs,crl,newcerts,private}
chmod 700 ~/pki/root/private
chmod 700 ~/pki/intermediate/private

Создадим необходимые файлы индекса и счётчики:

touch ~/pki/root/index.txt
echo 1000 > ~/pki/root/serial
touch ~/pki/intermediate/index.txt
echo 1000 > ~/pki/intermediate/serial

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

Сначала генерируем закрытый ключ. Рекомендуется использовать RSA‑4096 или EC‑P‑384.

# RSA‑4096
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 \
  -out ~/pki/root/private/ca.key.pem
chmod 400 ~/pki/root/private/ca.key.pem

# EC‑P‑384 (альтернатива)
# openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:secp384r1 \
#   -out ~/pki/root/private/ca.key.pem

Создаём самоподписанный сертификат:

openssl req -config <(cat <<'EOF'
[ req ]
default_bits = 4096
prompt = no
default_md = sha256
distinguished_name = dn
x509_extensions = v3_ca
[ dn ]
C = RU
ST = Ryazan
L = Ryazan
O = MyRootCA
OU = PKI Department
CN = MyRootCA
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:true,pathlen:1
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
EOF
) -key ~/pki/root/private/ca.key.pem \
  -new -x509 -days 3650 -sha256 \
  -out ~/pki/root/certs/ca.cert.pem
chmod 444 ~/pki/root/certs/ca.cert.pem

Проверим сертификат:

openssl x509 -noout -text -in ~/pki/root/certs/ca.cert.pem

Создание промежуточного сертификата (Intermediate CA)

Промежуточный центр позволяет ограничить срок действия корневого ключа.

# Генерация ключа
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 \
  -out ~/pki/intermediate/private/intermediate.key.pem
chmod 400 ~/pki/intermediate/private/intermediate.key.pem

# Запрос на сертификат (CSR)
openssl req -new -sha256 \
  -key ~/pki/intermediate/private/intermediate.key.pem \
  -subj "/C=RU/ST=Ryazan/L=Ryazan/O=MyIntermediateCA/OU=PKI Department/CN=MyIntermediateCA" \
  -out ~/pki/intermediate/csr/intermediate.csr.pem

# Подпись CSR корневым CA
openssl ca -config <(cat <<'EOF'
[ ca ]
default_ca = myca
[ myca ]
dir = ~/pki/root
certificate = $dir/certs/ca.cert.pem
private_key = $dir/private/ca.key.pem
new_certs_dir = $dir/newcerts
database = $dir/index.txt
serial = $dir/serial
default_md = sha256
policy = policy_anything
copy_extensions = copy
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ v3_intermediate_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:true,pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
EOF
) -extensions v3_intermediate_ca \
  -days 3650 -notext -md sha256 \
  -in ~/pki/intermediate/csr/intermediate.csr.pem \
  -out ~/pki/intermediate/certs/intermediate.cert.pem
chmod 444 ~/pki/intermediate/certs/intermediate.cert.pem

Создаём цепочку сертификатов (certificate chain) для дальнейшего использования:

cat ~/pki/intermediate/certs/intermediate.cert.pem \
    ~/pki/root/certs/ca.cert.pem > ~/pki/intermediate/certs/ca-chain.cert.pem

Выпуск серверного сертификата

Серверный сертификат будет подписан промежуточным CA.

# Генерация ключа сервера
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 \
  -out ~/pki/certs/server.key.pem
chmod 400 ~/pki/certs/server.key.pem

# CSR для сервера (указываем SAN)
openssl req -new -sha256 \
  -key ~/pki/certs/server.key.pem \
  -subj "/C=RU/ST=Ryazan/L=Ryazan/O=MyServer/OU=Web/CN=example.com" \
  -addext "subjectAltName = DNS:example.com, DNS:www.example.com" \
  -out ~/pki/certs/server.csr.pem

# Подпись CSR промежуточным CA
openssl ca -config <(cat <<'EOF'
[ ca ]
default_ca = myintermediate
[ myintermediate ]
dir = ~/pki/intermediate
certificate = $dir/certs/intermediate.cert.pem
private_key = $dir/private/intermediate.key.pem
new_certs_dir = $dir/newcerts
database = $dir/index.txt
serial = $dir/serial
default_md = sha256
policy = policy_anything
copy_extensions = copy
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ v3_server_cert ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
basicConstraints = CA:false
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = example.com
DNS.2 = www.example.com
EOF
) -extensions v3_server_cert \
  -days 825 -notext -md sha256 \
  -in ~/pki/certs/server.csr.pem \
  -out ~/pki/certs/server.cert.pem
chmod 444 ~/pki/certs/server.cert.pem

# Объединяем сертификат сервера и цепочку
cat ~/pki/certs/server.cert.pem \
    ~/pki/intermediate/certs/ca-chain.cert.pem > ~/pki/certs/server.fullchain.pem

Проверяем соответствие ключа и сертификата:

openssl x509 -noout -modulus -in ~/pki/certs/server.cert.pem | openssl md5
openssl rsa -noout -modulus -in ~/pki/certs/server.key.pem | openssl md5

Отзыв сертификатов и создание CRL

Для отзыва достаточно добавить запись в базу index.txt и сгенерировать список отозванных сертификатов (CRL).

# Отзовём сертификат с серийным номером, полученным из сертификата
SERIAL=$(openssl x509 -noout -serial -in ~/pki/certs/server.cert.pem | cut -d'=' -f2)
openssl ca -config <(cat <<'EOF'
[ ca ]
default_ca = myintermediate
[ myintermediate ]
dir = ~/pki/intermediate
certificate = $dir/certs/intermediate.cert.pem
private_key = $dir/private/intermediate.key.pem
new_certs_dir = $dir/newcerts
database = $dir/index.txt
serial = $dir/serial
default_md = sha256
policy = policy_anything
EOF
) -revoke ~/pki/certs/server.cert.pem

# Генерация CRL (Certificate Revocation List)
openssl ca -config <(cat <<'EOF'
[ ca ]
default_ca = myintermediate
[ myintermediate ]
dir = ~/pki/intermediate
certificate = $dir/certs/intermediate.cert.pem
private_key = $dir/private/intermediate.key.pem
new_certs_dir = $dir/newcerts
database = $dir/index.txt
serial = $dir/serial
crlnumber = $dir/crlnumber
default_md = sha256
policy = policy_anything
crl_extensions = crl_ext
[ crl_ext ]
authorityKeyIdentifier=keyid:always
EOF
) -gencrl -out ~/pki/intermediate/crl/intermediate.crl.pem
chmod 444 ~/pki/intermediate/crl/intermediate.crl.pem

Проверка CRL:

openssl crl -noout -text -in ~/pki/intermediate/crl/intermediate.crl.pem

Проверка цепочки сертификатов

openssl verify -CAfile ~/pki/intermediate/certs/ca-chain.cert.pem \
    -crl_check ~/pki/intermediate/crl/intermediate.crl.pem \
    ~/pki/certs/server.cert.pem

Если сертификат отозван, в выводе будет сообщение certificate revoked.

Автоматизация с помощью скриптов

Для упрощения повторяющихся задач удобно собрать набор функций в небольшом bash‑скрипте pki.sh. Примерный шаблон:

#!/usr/bin/env bash
set -euo pipefail
PKI_ROOT=~/pki

function init_root() {
    mkdir -p "$PKI_ROOT/root/{private,certs,newcerts}" && chmod 700 "$PKI_ROOT/root/private"
    touch "$PKI_ROOT/root/index.txt"
    echo 1000 > "$PKI_ROOT/root/serial"
    # генерация ключа и сертификата – см. раздел выше
}

function create_server_cert() {
    local CN=$1
    local SAN=$2
    # генерация ключа, CSR и подпись – аналогично приведённому коду
}

# Добавьте парсинг аргументов и вызов нужных функций

Сохраните файл, сделайте его исполняемым (chmod +x pki.sh) и используйте ./pki.sh create_server_cert example.com "DNS:example.com,DNS:www.example.com".

Заключение

Termux предоставляет полноценную Linux‑среду на Android‑устройстве, а openssl позволяет построить собственную инфраструктуру PKI без привлечения сторонних сервисов. Мы рассмотрели процесс создания корневого и промежуточного CA, выпуск серверных сертификатов, их отзыв и проверку цепочки. Такая автономная система пригодна как для разработки, так и для небольших продакшн‑проектов, где требуется быстрый и надёжный контроль над сертификатами.

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

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен экспертом RybinskLab.

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

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

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

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