Простой Центр Сертификации для strongSwan IPsec

2019-04-22

Начиная с версии strongswan 5.1.1 использование префикса ipsec перед pki является опциональным.

Setting-up a Simple CA Using the strongSwan PKI Tool

Для работы PKI необходимо установить пакеты:
- strongswan-starter
- strongswan-pki
- libcharon-extra-plugins # для поддержки ed25519

Используемые сокращения и термины:
- CA, Certification Authority, Центр Сертификации. Здесь оформлен в виде директории, в которой лежат два файла: приватный ключ Центра Сертификации и самоподписанный сертификат Центра Сертификации. В этой же папке создаются пары (приватный ключ и соответствующий ему сертификат открытого ключа) файлов-ключей для удостоверения каждого члена IPsec-сети организации.
- CRL, Certificate Revocation List, Список Отозванных Сертификатов.
- private key, приватный ключ, закрытый ключ. Здесь оформлен в виде файла с уникальной последовательностью бит. Из приватного ключа всегда можно вычислить парный ему уникальный публичный ключ, тогда как обратная операция математически невозможна.
- public key, публичный ключ, открытый ключ. Всегда может быть вычислен из приватного ключа и записан в отдельный файл, но в таком виде не используется. Вместо этого используется сертификат открытого ключа. Часто под понятием публичный ключ имеется ввиду сертификат открытого ключа выданный каким-либо Центром Сертификации.
- сертификат открытого ключа. Здесь оформлен в виде файла, содержащего публичный ключ и подпись Центра Сертификации. Только подписанный публичный ключ может использоваться в IPsec-сети организации, так как при подключении узла к IPsec-сети проверяется наличие подписи Центра Сертификации организации.

Выпуск ключевой пары Центра Сертификации

В отдельной директории, которая выделена для работы CA выполняется генерация приватного ключа Центра Сертификации:
для ключа Ed25519 (длина всегда 256 бит)

# ipsec pki --gen --type ed25519 > caKey.der

для RSA используется длина 4096 бит

# ipsec pki --gen --type rsa --size 4096 > caKey.der

При малой заполненности /dev/random неизбежно долгое ожидание завершения генерирования RSA-ключа. В этом случае рекомендуется использовать openssl, который при пустом /dev/random использует информацию из /dev/urandom:

# openssl genrsa -out caKey.pem 4096
# openssl rsa -inform pem -outform der -in caKey.pem -out caKey.der

Из этого приватного ключа вычисляется парный ему уникальный публичный ключ и к нему выпускается самоподписанный сертификат публичного ключа Центра Сертификации действительный три года начиная с момента выпуска:

# ipsec pki --self --in caKey.der --dn "C=RU, O=ExampleOrg, CN=ExampleOrg CA" --ca > caCert.der

В результате этих действий в директории CA находятся два файла:
- caKey.der
- caCert.der

С помощью первого файла производится подписание, то есть выпуск сертификатов открытых ключей для узлов IPsec-сети организации. Вследствии очевидной важности файла, он обязан храниться в секретном месте недоступном посторонним.

Создание ключевой пары для каждого узла в IPsec-сети

Для каждого узла генерируетс приватный ключ Ed25519 или RSA:

# ipsec pki --gen --type rsa --size 4096 > srv0Key.der
# ipsec pki --gen --type rsa --size 4096 > srv1Key.der
# ipsec pki --gen --type rsa --size 4096 > usr0Key.der
# ipsec pki --gen --type rsa --size 4096 > usr1Key.der

если не хватает энтропии из /dev/random для создания RSA-ключа, то вновь применяем openssl.

На основе каждого приватного ключа необходимо сгенерировать запрос на сертификацию публичного ключа и направить в CA организации, где на основе запроса выпускается сертификат публичного ключа подписанный CA, то есть утверждённый к работе в IPsec-сети организации.

Так как работа CA и выпуск приватных ключей находится под нашим полным контролем, то всё вышесказанное можно организовать единственной командой для каждого ключа:

# ipsec pki --issue --in sv0Key.der --type priv --cacert caCert.der --cakey caKey.der \
--dn "C=RU, O=ExampleOrg, CN=srv0" --san srv0 > srv0Cert.der

и так далее для каждого ключа.

Список Отозванных сертификатов

Для отзыва сертификата usr1Cert.der выполняется:

# ipsec pki --signcrl --cacert caCert.der --cakey caKey.der --reason superseded --cert usr1Cert.der > crl.der

Файл crl.der распространяется на все узлы IPsec-сети организации.

Размещение ключей и сертификатов на узлах IPsec-сети

Ключи и сертификаты сохраняются в директории /etc/ipsec.d/:
- /etc/ipsec.d/private/srv0Key.der содержит приватный ключ узла. Необходимо прописать его загрузку в ipsec.secrets.
- /etc/ipsec.d/certs/srv0Cert.der содержит сертификат открытого ключа узла. Для его использования необходимо прописать его в ipsec.conf.
- /etc/ipsec.d/cacerts/caCert.der подгружается автоматически и используется для проверки всех подключающихся узлов.

Опционально размещается CRL:
- /etc/ipsec.d/crls/crl.der содержит список отозванных сертификатов.