PKI (Public Key Infrastructure)

PKI (Public Key Infrastructure) в VyOS - это централизованная система управления сертификатами, ключами и удостоверяющими центрами (Certificate Authority - CA). VyOS предоставляет встроенные инструменты для генерации, хранения и управления криптографическими материалами, используемыми в VPN, HTTPS, и других защищенных сервисах.

Обзор

PKI в VyOS используется для:

  • VPN аутентификации: IPsec, OpenVPN с сертификатами вместо PSK
  • HTTPS сервисов: Защищенный web-интерфейс и REST API
  • Взаимная аутентификация: mTLS для критичных сервисов
  • Централизованное управление: Собственный CA для внутренней инфраструктуры
  • Certificate-based SSH: SSH аутентификация с сертификатами

Компоненты PKI

КомпонентОписаниеИспользование
CA (Certificate Authority)Удостоверяющий центрПодпись сертификатов
CertificateСертификат X.509Идентификация устройства/сервиса
Private KeyПриватный ключШифрование и подпись
Certificate Request (CSR)Запрос на сертификатПолучение сертификата от CA
CRL (Certificate Revocation List)Список отозванных сертификатовПроверка валидности

Типичный workflow

  1. Создание CA (корневой или промежуточный)
  2. Генерация приватного ключа для сервиса/устройства
  3. Создание CSR (Certificate Signing Request)
  4. Подпись CSR собственным CA или внешним
  5. Установка сертификата в VyOS
  6. Конфигурация сервисов для использования сертификата

Базовая конфигурация

Создание собственного CA

# Генерация приватного ключа для CA
generate pki ca install ca-internal

# Параметры CA (интерактивно):
# Country: RU
# State: Moscow
# Locality: Moscow
# Organization: My Company
# Common Name: My Company Root CA

# Проверка созданного CA
show pki ca ca-internal

commit
save

Генерация сертификата для сервера

# Генерация приватного ключа и сертификата
generate pki certificate sign ca-internal install vyos-server

# Параметры:
# Common Name: vyos.example.com
# Subject Alternative Names (опционально): DNS:vyos.example.com,IP:192.168.1.1

# Проверка
show pki certificate vyos-server

commit
save

Импорт существующего сертификата

# Импорт сертификата из файла
generate pki certificate import vyos-cert certificate-file /tmp/certificate.pem

# Импорт приватного ключа
generate pki key-pair import vyos-key private-key-file /tmp/private-key.pem

commit
save

Использование Let’s Encrypt

# Импорт Let's Encrypt сертификата
generate pki certificate import letsencrypt-vyos \
  certificate-file /etc/letsencrypt/live/vyos.example.com/fullchain.pem \
  private-key-file /etc/letsencrypt/live/vyos.example.com/privkey.pem

# Настройка HTTPS с Let's Encrypt
set service https certificates certificate letsencrypt-vyos

commit
save

Расширенная конфигурация

Создание иерархии CA (Root + Intermediate)

Root CA:

# Создание Root CA (офлайн, хранить в безопасном месте)
generate pki ca install root-ca

# Параметры:
# Common Name: My Company Root CA
# Key size: 4096
# Validity: 3650 days (10 лет)

commit
save

Intermediate CA:

# Создание Intermediate CA
generate pki ca sign root-ca install intermediate-ca

# Параметры:
# Common Name: My Company Intermediate CA
# Key size: 2048
# Validity: 1825 days (5 лет)

commit
save

Подпись сертификатов Intermediate CA:

# Сертификаты подписываются промежуточным CA
generate pki certificate sign intermediate-ca install server-cert

commit
save

Генерация сертификата с SAN (Subject Alternative Names)

# Сертификат с множественными именами
generate pki certificate sign ca-internal install multi-san-cert

# При запросе SAN указать:
# DNS:vyos.example.com,DNS:router.example.com,IP:192.168.1.1,IP:10.0.0.1

commit
save

Wildcard сертификат

# Wildcard сертификат для поддомена
generate pki certificate sign ca-internal install wildcard-cert

# Common Name: *.example.com
# Позволяет использовать для любого поддомена: router.example.com, vpn.example.com, etc.

commit
save

Client сертификаты для VPN

# Сертификат для VPN клиента
generate pki certificate sign ca-internal install client-alice

# Параметры:
# Common Name: alice@example.com
# Extended Key Usage: clientAuth

# Экспорт для передачи клиенту
show pki certificate client-alice pem

commit
save

Certificate Revocation List (CRL)

# Создание CRL для CA
generate pki crl ca-internal install crl-internal

# Отзыв сертификата
set pki ca ca-internal crl revoke client-alice

# Обновление CRL
generate pki crl ca-internal regenerate

commit
save

Настройка сроков действия

# Генерация с кастомным сроком действия (365 дней)
generate pki certificate sign ca-internal install short-term-cert valid-days 365

commit
save

Примеры конфигураций

Пример 1: IPsec VPN с сертификатами

# Создание CA
generate pki ca install vpn-ca

# Сертификат для локального роутера
generate pki certificate sign vpn-ca install vyos-site-a

# Сертификат для удаленного роутера (экспортировать)
generate pki certificate sign vpn-ca install vyos-site-b

# IPsec конфигурация с сертификатами
set vpn ipsec authentication psk-secret 'fallback-psk'
set vpn ipsec esp-group ESP-VPN proposal 1 encryption aes256
set vpn ipsec esp-group ESP-VPN proposal 1 hash sha256

set vpn ipsec ike-group IKE-VPN key-exchange ikev2
set vpn ipsec ike-group IKE-VPN proposal 1 encryption aes256
set vpn ipsec ike-group IKE-VPN proposal 1 hash sha256

# Site-to-Site с сертификатами
set vpn ipsec site-to-site peer site-b authentication mode x509
set vpn ipsec site-to-site peer site-b authentication x509 ca-certificate vpn-ca
set vpn ipsec site-to-site peer site-b authentication x509 certificate vyos-site-a
set vpn ipsec site-to-site peer site-b ike-group IKE-VPN
set vpn ipsec site-to-site peer site-b local-address 203.0.113.1
set vpn ipsec site-to-site peer site-b remote-address 198.51.100.1
set vpn ipsec site-to-site peer site-b tunnel 0 esp-group ESP-VPN
set vpn ipsec site-to-site peer site-b tunnel 0 local prefix 192.168.1.0/24
set vpn ipsec site-to-site peer site-b tunnel 0 remote prefix 192.168.2.0/24

commit
save

Пример 2: OpenVPN с CA и клиентскими сертификатами

# Создание CA для OpenVPN
generate pki ca install openvpn-ca

# Серверный сертификат
generate pki certificate sign openvpn-ca install openvpn-server

# Клиентские сертификаты
generate pki certificate sign openvpn-ca install client-user1
generate pki certificate sign openvpn-ca install client-user2

# DH parameters
generate pki dh install dh-2048 bits 2048

# OpenVPN сервер конфигурация
set interfaces openvpn vtun10 mode server
set interfaces openvpn vtun10 server subnet 10.8.0.0/24
set interfaces openvpn vtun10 tls ca-certificate openvpn-ca
set interfaces openvpn vtun10 tls certificate openvpn-server
set interfaces openvpn vtun10 tls dh-params dh-2048

commit
save

# Экспорт клиентского сертификата для пользователя
show pki ca openvpn-ca pem
show pki certificate client-user1 pem
show pki certificate client-user1 private key

Пример 3: HTTPS с собственным CA

# Создание CA
generate pki ca install web-ca

# Сертификат для web-интерфейса с SAN
generate pki certificate sign web-ca install web-server

# При создании указать SAN:
# DNS:vyos.example.com,IP:192.168.1.1

# Настройка HTTPS
set service https certificates certificate web-server

# Restart HTTPS service
restart https

commit
save

Пример 4: Корпоративный PKI с иерархией

# Root CA (создается один раз, хранится офлайн)
generate pki ca install company-root-ca
# CN: Company Name Root CA
# Validity: 7300 days (20 лет)

# Intermediate CA для серверов
generate pki ca sign company-root-ca install servers-ca
# CN: Company Name Servers CA
# Validity: 3650 days (10 лет)

# Intermediate CA для клиентов
generate pki ca sign company-root-ca install clients-ca
# CN: Company Name Clients CA
# Validity: 3650 days (10 лет)

# Серверные сертификаты подписываются servers-ca
generate pki certificate sign servers-ca install web-server
generate pki certificate sign servers-ca install vpn-server

# Клиентские сертификаты подписываются clients-ca
generate pki certificate sign clients-ca install client-alice
generate pki certificate sign clients-ca install client-bob

commit
save

Пример 5: Let’s Encrypt с автообновлением

# Установка certbot (на VyOS)
sudo apt-get update
sudo apt-get install certbot

# Получение сертификата (HTTP-01 challenge)
sudo certbot certonly --standalone \
  --preferred-challenges http \
  --email admin@example.com \
  --agree-tos \
  -d vyos.example.com

# Импорт в VyOS
generate pki certificate import letsencrypt-vyos \
  certificate-file /etc/letsencrypt/live/vyos.example.com/fullchain.pem \
  private-key-file /etc/letsencrypt/live/vyos.example.com/privkey.pem

# Настройка HTTPS
set service https certificates certificate letsencrypt-vyos

commit
save

Скрипт автообновления /config/scripts/renew-letsencrypt.sh:

#!/bin/bash

# Обновление сертификата
sudo certbot renew --quiet

# Проверка обновления
if [ $? -eq 0 ]; then
    # Переимпорт в VyOS
    /usr/libexec/vyos/op_mode/pki.py import certificate \
      letsencrypt-vyos \
      /etc/letsencrypt/live/vyos.example.com/fullchain.pem \
      /etc/letsencrypt/live/vyos.example.com/privkey.pem

    # Restart HTTPS
    sudo systemctl restart vyos-http-api-server

    logger -t letsencrypt "Certificate renewed successfully"
else
    logger -t letsencrypt -p user.err "Certificate renewal failed"
fi

Task Scheduler для автообновления:

set system task-scheduler task renew-letsencrypt interval '0 3 * * *'
set system task-scheduler task renew-letsencrypt executable path '/config/scripts/renew-letsencrypt.sh'

Пример 6: Wildcard сертификат для множественных сервисов

# Создание CA
generate pki ca install internal-ca

# Wildcard сертификат
generate pki certificate sign internal-ca install wildcard-example-com
# CN: *.example.com

# Использование для различных сервисов
# HTTPS
set service https certificates certificate wildcard-example-com

# OpenVPN
set interfaces openvpn vtun0 tls certificate wildcard-example-com

commit
save

Мониторинг и диагностика

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

# Показать все CA
show pki ca

# Детали конкретного CA
show pki ca ca-internal

# Экспорт CA в PEM
show pki ca ca-internal pem

# Показать все сертификаты
show pki certificate

# Детали конкретного сертификата
show pki certificate vyos-server

# Экспорт сертификата
show pki certificate vyos-server pem

# Экспорт приватного ключа
show pki certificate vyos-server private key

Проверка срока действия

# Проверка сертификата
show pki certificate vyos-server

# Вывод включает:
# - Issuer (кто выдал)
# - Subject (кому выдан)
# - Valid From / Valid To (срок действия)
# - Subject Alternative Names

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

# Проверка, что сертификат подписан нужным CA
show pki certificate vyos-server

# Проверка через openssl (в shell)
openssl verify -CAfile ca.pem certificate.pem

Тестирование HTTPS с сертификатом

# С клиента
curl -k https://192.168.1.1/
curl --cacert ca.crt https://vyos.example.com/

# Проверка деталей сертификата
openssl s_client -connect vyos.example.com:443 -showcerts

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

# Проверка конфигурации
show vpn ipsec sa

# Логи IPsec
show log vpn ipsec

# Детали сертификата в IPsec
sudo swanctl --list-certs

Monitoring истечения сертификатов

Скрипт /config/scripts/check-cert-expiry.sh:

#!/bin/bash

ALERT_DAYS=30
CERTS="vyos-server openvpn-server"

for cert in $CERTS; do
    # Получение даты истечения
    EXPIRY=$(cli-shell-api showConfig pki certificate $cert | grep "Valid To" | awk '{print $3}')

    # Конвертация и проверка (упрощенно)
    # В production использовать полноценный парсинг дат

    # Если близко к истечению - отправить алерт
    # echo "Certificate $cert expires on $EXPIRY" | mail -s "Cert Expiry Alert" admin@example.com

    logger -t cert-monitor "Checked certificate $cert"
done

Task Scheduler:

set system task-scheduler task cert-monitor interval '0 0 * * *'
set system task-scheduler task cert-monitor executable path '/config/scripts/check-cert-expiry.sh'

Устранение неполадок

Проблема: Сертификат не валидируется

Диагностика:

# Проверка сертификата
show pki certificate vyos-server

# Проверка CA
show pki ca ca-internal

# Проверка через openssl
openssl x509 -in certificate.pem -text -noout
openssl verify -CAfile ca.pem certificate.pem

Решение:

# Убедиться, что сертификат подписан правильным CA
# Проверить цепочку: Certificate -> Intermediate CA -> Root CA

# Переподписать, если необходимо
generate pki certificate sign ca-internal install vyos-server

commit
save

Проблема: IPsec не работает с сертификатами

Диагностика:

# Проверка конфигурации
show configuration vpn ipsec

# Логи
show log vpn ipsec | match certificate

# Детали
sudo swanctl --list-certs
sudo ipsec statusall

Решение:

# Убедиться, что CA и сертификат настроены
show pki ca vpn-ca
show pki certificate vyos-site-a

# Проверить IPsec конфигурацию
set vpn ipsec site-to-site peer site-b authentication mode x509
set vpn ipsec site-to-site peer site-b authentication x509 ca-certificate vpn-ca
set vpn ipsec site-to-site peer site-b authentication x509 certificate vyos-site-a

commit
save

# Restart IPsec
restart ipsec

Проблема: HTTPS не использует новый сертификат

Решение:

# Проверить конфигурацию
show configuration service https certificates

# Установить сертификат
set service https certificates certificate new-cert

commit
save

# Restart HTTPS
restart https

Проблема: Сертификат истек

Решение:

# Сгенерировать новый сертификат
generate pki certificate sign ca-internal install vyos-server-new

# Обновить конфигурацию сервисов
set service https certificates certificate vyos-server-new

# Удалить старый
delete pki certificate vyos-server

commit
save

Проблема: Приватный ключ поврежден

Решение:

# Создать новую пару ключ-сертификат
generate pki certificate sign ca-internal install new-cert

# Обновить все ссылки на старый сертификат

commit
save

Проблема: CA не доверяется клиентами

Решение:

Экспортировать CA и установить на клиентские системы:

# На VyOS
show pki ca ca-internal pem > company-ca.crt

# На Linux клиенте
sudo cp company-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

# На Windows
# Импортировать через certmgr.msc в "Trusted Root Certification Authorities"

# На macOS
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain company-ca.crt

Лучшие практики

1. Иерархия CA

Используйте Root + Intermediate CA:

# Root CA - офлайн, долгий срок действия
# Intermediate CA - онлайн, подписывает сертификаты

2. Сроки действия

Разумные сроки:

# Root CA: 10-20 лет
# Intermediate CA: 5-10 лет
# Серверные сертификаты: 1-3 года
# Клиентские сертификаты: 1-2 года

3. Размер ключей

# CA: 4096 бит
# Серверные сертификаты: 2048 бит (баланс безопасность/производительность)
# Клиентские сертификаты: 2048 бит

4. Subject Alternative Names

Всегда используйте SAN для совместимости:

# CN: vyos.example.com
# SAN: DNS:vyos.example.com,DNS:router.example.com,IP:192.168.1.1

5. Защита приватных ключей

# Ограничьте доступ к конфигурации
sudo chmod 600 /config/config.boot

# Храните Root CA офлайн
# Используйте passphrase для критичных ключей (вне VyOS)

6. Certificate Revocation

Настройте CRL для отзыва:

set pki ca ca-internal crl revoke compromised-cert
generate pki crl ca-internal regenerate

7. Мониторинг истечения

Настройте автоматическую проверку:

set system task-scheduler task cert-monitor interval '0 0 * * *'

8. Документирование

Документируйте все сертификаты:

# /config/pki-inventory.txt
# vyos-server: CN=vyos.example.com, Expires: 2026-10-14, Used by: HTTPS
# openvpn-server: CN=vpn.example.com, Expires: 2026-10-14, Used by: OpenVPN

9. Резервное копирование

Резервное копирование PKI:

# Backup всех сертификатов и ключей
show pki ca > /config/backup/pki-ca-backup.txt
show pki certificate > /config/backup/pki-cert-backup.txt

# Регулярное копирование конфигурации
/opt/vyatta/sbin/vyatta-save-config.pl /config/backup/config.boot.$(date +%Y%m%d)

10. Тестирование перед production

Тестируйте сертификаты перед развертыванием:

# Проверка валидности
openssl verify -CAfile ca.pem certificate.pem

# Проверка сроков
openssl x509 -in certificate.pem -noout -dates

# Проверка SAN
openssl x509 -in certificate.pem -noout -text | grep "Subject Alternative Name" -A1

Полезные команды

# Показать все CA
show pki ca

# Показать все сертификаты
show pki certificate

# Детали CA
show pki ca ca-internal

# Детали сертификата
show pki certificate vyos-server

# Экспорт CA в PEM
show pki ca ca-internal pem

# Экспорт сертификата
show pki certificate vyos-server pem

# Экспорт приватного ключа
show pki certificate vyos-server private key

# Генерация CA
generate pki ca install new-ca

# Генерация сертификата
generate pki certificate sign ca-internal install new-cert

# Импорт сертификата
generate pki certificate import cert-name certificate-file /path/to/cert.pem

# Импорт ключа
generate pki key-pair import key-name private-key-file /path/to/key.pem

# Конфигурация
show configuration pki

# OpenSSL команды для проверки
openssl x509 -in cert.pem -text -noout
openssl verify -CAfile ca.pem cert.pem
openssl s_client -connect host:443 -showcerts

Интеграция с другими функциями

PKI + IPsec VPN

set vpn ipsec site-to-site peer site-b authentication mode x509
set vpn ipsec site-to-site peer site-b authentication x509 ca-certificate vpn-ca
set vpn ipsec site-to-site peer site-b authentication x509 certificate site-a-cert

PKI + OpenVPN

set interfaces openvpn vtun0 tls ca-certificate openvpn-ca
set interfaces openvpn vtun0 tls certificate server-cert
set interfaces openvpn vtun0 tls dh-params dh-2048

PKI + HTTPS

set service https certificates certificate web-cert

PKI + SSH (сертификаты)

# Использование SSH CA для аутентификации (расширенная настройка)
# Требует дополнительной конфигурации OpenSSH

Заключение

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

Основные преимущества PKI в VyOS:

  • Централизованное управление сертификатами
  • Собственный CA для внутренней инфраструктуры
  • Поддержка иерархии CA (Root + Intermediate)
  • Интеграция с VPN (IPsec, OpenVPN)
  • Let’s Encrypt support
  • Certificate Revocation Lists (CRL)

Рекомендации для production:

  • Используйте иерархию CA (Root офлайн + Intermediate онлайн)
  • Применяйте разумные сроки действия
  • Используйте SAN для всех сертификатов
  • Защищайте приватные ключи
  • Настройте мониторинг истечения
  • Документируйте все сертификаты
  • Регулярно создавайте резервные копии
  • Тестируйте перед production
  • Используйте CRL для отзыва скомпрометированных сертификатов

PKI в VyOS предоставляет enterprise-grade управление сертификатами для построения безопасной инфраструктуры с certificate-based аутентификацией, исключая необходимость использования PSK (Pre-Shared Keys) и обеспечивая централизованный контроль над криптографическими материалами.