Развертывание Центра Сертификации (Easy-RSA 3) для корпоративной PKI и VPN
- Истечение срока действия корневого сертификата CA или клиентских сертификатов, приводящее к остановке VPN-шлюзов.
- Ошибки валидации:
VERIFY ERROR: depth=0, error=certificate has expiredилиself-signed certificate in chain. - Невозможность оперативно отозвать скомпрометированный сертификат уволенного сотрудника.
- Хранение приватного ключа корневого CA на публичном интернет-сервере (угроза компрометации всей сети).
1. Изоляция инфраструктуры открытых ключей (PKI)
Корневой удостоверяющий центр (Root CA) должен быть развернут на изолированном от сети хосте (Offline CA). На рабочий VPN-сервер копируются только публичный сертификат ca.crt, список отозванных сертификатов crl.pem и сгенерированные серверные ключи.
2. Инициализация PKI и создание Корневого CA
# Установка утилиты
apt-get install -y easy-rsa
make-cadir /opt/vpn-ca
cd /opt/vpn-ca
# 1. Настройка переменных в файле vars
cat << 'EOF' > vars
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_CURVE "prime256v1"
set_var EASYRSA_CA_EXPIRE 3650
set_var EASYRSA_CERT_EXPIRE 825
set_var EASYRSA_CRL_DAYS 180
EOF
# 2. Инициализация чистого PKI хранилища
./easyrsa init-pki
# 3. Выпуск корневого сертификата CA (с запросом пароля)
./easyrsa build-ca3. Выпуск сертификата для VPN-сервера
# Генерация запроса и ключа без пароля (nopass)
./easyrsa gen-req vpn-server-hq nopass
# Подпись серверного сертификата
./easyrsa sign-req server vpn-server-hq4. Выпуск клиентского сертификата пользователя
# Генерация запроса для сотрудника
./easyrsa gen-req ivan_petrov nopass
# Подпись сертификата с ролью 'client'
./easyrsa sign-req client ivan_petrov5. Процедура отзыва сертификата (Revocation) и генерация CRL
# 1. Отзыв скомпрометированного сертификата
./easyrsa revoke ivan_petrov
# 2. Генерация обновленного списка отзыва (Certificate Revocation List)
./easyrsa gen-crl
# 3. Копирование crl.pem на рабочий VPN сервер
scp /opt/vpn-ca/pki/crl.pem root@vpn.corp.ru:/etc/openvpn/crl.pem6. Подключение проверки CRL в OpenVPN
# В server.conf добавьте директиву:
crl-verify /etc/openvpn/crl.pem Частые вопросы (FAQ)
Почему рекомендуется использовать криптографию на эллиптических кривых (ECDSA)?
Сертификаты на базе эллиптических кривых (например, prime256v1) обеспечивают ту же криптостойкость, что и RSA 3072-bit, но имеют меньший размер ключа, что в разы ускоряет рукопожатие IKE/TLS и снижает оверхед.
Что произойдет, если истечет срок действия файла crl.pem?
Если срок действия CRL (параметр EASYRSA_CRL_DAYS) истечет, сервер OpenVPN из соображений безопасности начнет отклонять подключения ВСЕХ клиентов с ошибкой 'CRL has expired'.
Как автоматизировать обновление CRL на боевых серверах?
Настройте systemd-таймер или cron, который еженедельно запускает ./easyrsa gen-crl на CA и безопасно синхронизирует файл crl.pem на VPN-шлюзы через rsync/SSH.
Зачем нужны флаги назначения сертификата (server / client)?
Расширение X509 Extended Key Usage строго разграничивает назначение ключей (Server Auth / Client Auth), предотвращая атаку 'человек посередине', если клиент попытается выдать свой ключ за серверный.