Простой Центр Сертификации для 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
содержит список отозванных сертификатов.