У меня установлен сервер OpenVPN на машине Debian.
Есть ли способ узнать, какой из ключей был создан без шифрования паролем, чтобы заменить их?
Вы можете использовать openssl rsa
команда, чтобы определить, был ли ключ зашифрован паролем или нет:
if ! openssl pkey -passin pass:"" -in $keyfile > /dev/null 2>&1; then
echo "$keyfile is encrypted."
fi
Это пытается расшифровать файл с пустой парольной фразой, которая отлично работает с незашифрованными ключами, но в противном случае потерпит неудачу. См. Раздел «ФРАЗОВЫЕ АРГУМЕНТЫ» openssl(1)
справочную страницу для получения дополнительной информации об аргументах -passin
вариант.
OpenVPN использует SSL / TLS для своей безопасности, поэтому он использует сертификаты и ключи SSL (поэтому ваш вопрос на самом деле не имеет ничего общего с OpenVPN). OpenVPN использует OpenSSL для работы (почти) со всеми вопросами безопасности, и его --key
вариант (просто key
в файлах конфигурации) ожидает, что ключ будет храниться в так называемом PEM
формат (см. этот для общего обзора; сам формат определен в RFC 1421). Зашифрованные ключи хранятся в PEM
формат отличается от незашифрованного тем, что имеет набор специальных полей заголовка, определяющих факт шифрования и используемый алгоритм шифрования - здесь пример.
Итак, строго говоря, вы должны обрабатывать каждый ключевой файл с помощью сценария, который попытается выполнить некоторый минимальный объем синтаксического анализа: определить строку заголовка (которая ------- BEGIN ...
вещь), а затем попробуйте посмотреть, есть ли признаки шифрования. Но это, возможно, слишком сложно для одноразового решения, поэтому мне больше всего нравится ответ @larsks - это грубая сила, но достаточно элегантный и простой. Поэтому мой ответ здесь для того, чтобы ввести вас в некоторый контекст.
Учтите, что странно, почему у вас ключи клиентов на сервере: серверу не нужны ни ключи клиентов, ни их сертификаты - все, что его интересует, - это доступ к этим битам информации:
Вся идея о том, что OpenVPN доверяет некоторым, но не всем клиентам, основана на том факте, что он пропускает только тех клиентов, которые предоставляют действительные сертификаты. выдается центром сертификации, которому доверяет сервер- в большинстве случаев это тот же СА, который также выдал сертификат сервера. Однако есть способы ограничить это:
Следовательно, нет необходимости хранить клиентские ключи на сервере: если клиент потерял свой сертификат и / или свой ключ, ваш центр сертификации должен отозвать его (обновить CRL) и выдать еще один. Таким образом, хранение общедоступных сертификатов клиентов может быть полезно (для более легкого отзыва), но даже это не требуется.
Для ключей без пароля фактический ключ обычно начинается со второй строки, а для ключей с паролем вы также можете найти три дополнительных строки.
Вы можете сделать что-то вроде wc -l /etc/openvpn/easy-rsa/keys/*.key
а ключи с меньшим количеством строк не имеют пароля.
Удаление ключей ничего не делает в OpenVPN, и пользователи по-прежнему смогут подключаться со своим сертификатом и ключом. Вам необходимо отозвать сертификат пользователя, которому вы хотите запретить подключение.