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
- Создание CA (корневой или промежуточный)
- Генерация приватного ключа для сервиса/устройства
- Создание CSR (Certificate Signing Request)
- Подпись CSR собственным CA или внешним
- Установка сертификата в VyOS
- Конфигурация сервисов для использования сертификата
Базовая конфигурация
Создание собственного 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
saveIntermediate 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
saveWildcard сертификат
# Wildcard сертификат для поддомена
generate pki certificate sign ca-internal install wildcard-cert
# Common Name: *.example.com
# Позволяет использовать для любого поддомена: router.example.com, vpn.example.com, etc.
commit
saveClient сертификаты для 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
saveCertificate 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"
fiTask 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-certsMonitoring истечения сертификатов
Скрипт /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"
doneTask 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.15. Защита приватных ключей
# Ограничьте доступ к конфигурации
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 regenerate7. Мониторинг истечения
Настройте автоматическую проверку:
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: OpenVPN9. Резервное копирование
Резервное копирование 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-certPKI + 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-2048PKI + HTTPS
set service https certificates certificate web-certPKI + 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) и обеспечивая централизованный контроль над криптографическими материалами.