Я тестировал strongSwan VPN на сервере Linux в домене Windows Active Directory.
Мне удалось заставить работать одноуровневую PKI с аутентификацией EAP, но когда я пытаюсь добавить промежуточный центр сертификации в настройку, подключение к VPN не удается.
VPN и оба CA - это коробки Debian 9.
Я уже отключил весь этот тестовый домен, и я готовлюсь начать все с нуля, и мне было интересно, есть ли у кого-нибудь какие-нибудь мнения о том, что я делаю неправильно.
Вот команды, которые я выполнил для создания пары ключей CA и сервера.
Создание закрытого ключа корневого ЦС:
$ ipsec pki --gen --type rsa --size 4096 --outform pem > ca.key.pem
$ chmod 600 ca.key.pem
Создать самоподписанный сертификат:
$ ipsec pki --self --flag serverAuth --in ca.key.pem \
--type rsa --digest sha256 \
--dn "C=US, O=IT_Testing, CN=VPN Root CA" --ca > ca.crt.der
Создайте промежуточный закрытый ключ CA:
$ ipsec pki --gen --type rsa --size 4096 --outform pem > intca.key.pem
Сгенерируйте промежуточный CA CSR:
$ ipsec pki --pub --in intca.key.pem --type rsa > intca.csr
Подпишите промежуточный CA CSR:
$ ipsec pki --issue --cacert ca.crt.der \
--cakey ca.key.pem --digest sha256 \
--dn "C=US, O=IT_Testing, CN=INT CA" \
--san "intca.testdomain.com" --flag serverAuth \
--flag ikeIntermediate --outform pem \
< intca.csr > intca.crt.pem
Создайте закрытый ключ VPN-сервера и CSR:
$ ipsec pki --gen --type rsa --size 2048 --outform pem > vpn.testdomain.com.key.pem
$ ipsec pki --pub --in vpn.testdomian.com.key.pem --type rsa > vpn.testdomain.com.csr
Подпишите сертификат VPN-сервера:
$ ipsec pki --issue --cacert intca.crt.pem \
--cakey intca.key.pem --digest sha256 \
--dn "C=US, O=IT_Testing, CN=vpn.testdomain.com" \
--san "vpn.testdomain.com" --flag serverAuth --outform pem \
< vpn.testdomain.com.csr > vpn.testdomain.com.crt.pem
Копирую сертификат корневого ЦС в /etc/ipsec.d/cacerts
, сертификат VPN для /etc/ipsec.d/certs
и ключ сервера VPN для /etc/ipsec.d/private
.
Я добавляю строку leftcert=/etc/ipsec.d/certs/vpn.testdomain.com.crt.pem
к ipsec.conf
. Как и точка ipsec.secrets
к закрытому ключу VPN-сервера.
В остальном конфиг такой же, как у рабочего одноуровневого pki.
При выдаче промежуточного сертификата CA убедитесь, что вы добавили --ca
в командную строку, чтобы добавить CA basicConstraint и фактически создать сертификат CA.
И не добавляйте serverAuth
и ikeIntermediate
флаги к нему, только добавьте их в сертификат сервера. ikeIntermediate
не относится к промежуточным сертификатам CA, а к промежуточным системам IPsec, и, вероятно, нет необходимости добавлять его больше (это было только определено в проекте и я думаю, что это требовалось только очень старой версии macOS).