Структура /etc/swanctl и настройка CA, сертификатов и CRL в strongSwan

StrongSwan swanctl pki

В предыдущей статье мы рассмотрели, почему swanctl является предпочтительным способом управления strongSwan. В этой части разберём структуру каталогов /etc/swanctl и базовые принципы настройки центра сертификации (CA), сертификатов и списков отзыва (CRL).


Структура каталогов /etc/swanctl

При использовании swanctl strongSwan следует строгой и предсказуемой структуре каталогов. По умолчанию все файлы располагаются в /etc/swanctl.

/etc/swanctl/
├── swanctl.conf
├── x509ca/
├── x509/
├── private/
└── x509crl/

Рассмотрим назначение каждого элемента.

swanctl.conf

Основной конфигурационный файл swanctl.

В нём описываются:

  • VPN-соединения (connections)
  • центры сертификации (authorities)
  • секреты (secrets)
  • пулы адресов (pools)

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


x509ca/сертификаты центров сертификации

Каталог для сертификатов CA (Root и Intermediate).

/etc/swanctl/x509ca/
└── ca-cert.pem
  • Содержит публичные сертификаты CA
  • Используется для проверки цепочки доверия
  • Закрытые ключи CA здесь не хранятся

x509/сертификаты узлов

Каталог для сертификатов:

  • VPN-сервера
  • клиентов
  • site-to-site peer’ов
/etc/swanctl/x509/
├── vpn-server-cert.pem
└── vpn-client-cert.pem

Это публичные сертификаты, соответствующие закрытым ключам из private/.


private/закрытые ключи

Каталог для закрытых ключей:

/etc/swanctl/private/
├── vpn-server-key.pem
└── vpn-client-key.pem

⚠️ Важно:

  • Права доступа должны быть ограничены (600)
  • Файлы читаются только пользователем root
  • Закрытые ключи CA обычно хранятся вне этого каталога (офлайн)

x509crl/списки отзыва сертификатов (CRL)

Каталог для Certificate Revocation List:

/etc/swanctl/x509crl/
└── ca-crl.pem

CRL используется strongSwan для проверки:

  • не был ли сертификат отозван
  • действителен ли он на момент установки соединения

Настройка CA, сертификатов и CRL — общие принципы

Центр сертификации (CA)

В контексте strongSwan:

  • CA используется для подписания серверных и клиентских сертификатов
  • strongSwan доверяет CA, сертификат которого указан в x509ca/

Минимальный набор:

  • CA certificate → /etc/swanctl/x509ca/
  • CA CRL → /etc/swanctl/x509crl/

Сертификаты сервера и клиентов

Для VPN обычно используются:

  • сертификат сервера (IKE responder)
  • сертификаты клиентов или peer’ов

Требования:

  • Key Usage и Extended Key Usage должны соответствовать IKE
  • CN или SAN должны совпадать с настройками swanctl.conf

Размещение:

  • сертификаты → x509/
  • закрытые ключи → private/

CRL (Certificate Revocation List)

CRL — обязательный элемент при строгой PKI-модели.

strongSwan:

  • поддерживает проверку CRL
  • загружает CRL через swanctl
  • может проверять срок действия CRL и серийные номера отозванных сертификатов

CRL-файл:

  • должен быть в формате PEM
  • подписан тем же CA, которому доверяет strongSwan

Размещение:

/etc/swanctl/x509crl/ca-crl.pem

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

Установим необходимые пакеты:

sudo apt update
sudo apt install -y strongswan-pki

Создадим рабочую директорию:

mkdir -p ~/pki/{ca,server,crl}
cd ~/pki

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

Генерация закрытого ключа CA

pki --gen --type rsa --size 4096 --outform pem > ca/ca-key.pem
chmod 600 ca/ca-key.pem

Создание самоподписанного сертификата CA

pki --self \
    --ca \
    --lifetime 3650 \
    --in ca/ca-key.pem \
    --type rsa \
    --dn "CN=VPN Root CA" \
    --outform pem > ca/ca-cert.pem

Результат:

  • ca-key.pem — закрытый ключ CA
  • ca-cert.pem — публичный сертификат CA

📌 В strongSwan сервер копируется только ca-cert.pem


Генерация сертификата VPN-сервера

Генерация закрытого ключа сервера

pki --gen --type rsa --size 4096 --outform pem > server/server-key.pem
chmod 600 server/server-key.pem

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

pki --pub --in server/server-key.pem --type rsa | \
    strongswan pki --issue --lifetime 1825 \
    --cacert ca/ca-cert.pem \
    --cakey ca/ca-key.pem \
    --dn "C=US, O=My Company, CN=vpn.example.com" \
    --san vpn.example.com \
    --san @vpn.example.com \
    --flag serverAuth --flag ikeIntermediate \
    --outform pem > server/server-cert.pem

Флаги:

  • serverAuth — разрешает использование в роли сервера
  • ikeIntermediate — рекомендуется для IKEv2

Создание Certificate Revocation List (CRL)

Генерация CRL

pki --signcrl \
    --cacert ca/ca-cert.pem \
    --cakey ca/ca-key.pem \
    --lifetime 30 \
    --outform pem > crl/ca-crl.pem

Параметры:

  • --lifetime 30 — CRL действителен 30 дней
  • CRL должен регулярно обновляться

Размещение файлов на VPN-сервере

Скопируйте файлы в /etc/swanctl:

/etc/swanctl/
├── x509ca/
│   └── ca-cert.pem
├── x509/
│   └── server-cert.pem
├── private/
│   └── server-key.pem
└── x509crl/
    └── ca-crl.pem

Права доступа:

chmod 600 /etc/swanctl/private/server-key.pem
chmod 644 /etc/swanctl/x509/*.pem
chmod 644 /etc/swanctl/x509ca/*.pem
chmod 644 /etc/swanctl/x509crl/*.pem

Что дальше?

  1. Настройка подключения с аутентификацией по EAP-MSCHAPV2
  2. Настройка подключения с аутентификацией по EAP-TLS
  3. Настройка подключения с аутентификацией по как по EAP-TLS, так и EAP-MSCHAPV2.