Запрос ключа OpenVPN после OpenSSL 3: проверьте провайдера
Внезапный запрос парольной фразы к закрытому ключу часто следует за сменой провайдера, а не за новым паролем. Проверьте ключ, испытайте оба набора провайдеров и сохраните парольную фразу.
Никто не трогал профиль, но тот же клиент теперь при каждом запуске требует парольную фразу для закрытого ключа. Когда это изменение появляется в течение нескольких дней после обновления дистрибутива, вероятная причина — само обновление: OpenSSL 3 перестроил поддержку алгоритмов, и ключ, который старая библиотека читала без труда, может стать нечитаемым без изменения хотя бы одного байта. Выполняйте проверки по порядку, потому что две из них выглядят одинаково, если смотреть только на запрос.
Первый вопрос — зашифрован ли ключ, второй — может ли эта сборка его расшифровать. Изменения конфигурации имеют смысл только после того, как известны оба ответа.
Проверьте, зашифрован ли ключ
Прочитайте первую строку файла и затем дайте библиотеке разобрать его, потому что имя файла ничего не доказывает. Блок PEM с меткой ENCRYPTED PRIVATE KEY — это зашифрованный PKCS#8, а более старый RSA PRIVATE KEY блок с Proc-Type: 4,ENCRYPTED — традиционная форма, и оба ожидают парольную фразу. Незашифрованный PRIVATE KEY блок вообще не должен её запрашивать. Запускайте разбор от той учётной записи, которой принадлежит файл, потому что проблема с правами даёт другую и куда менее интересную ошибку.
Если ключ действительно не зашифрован, а клиент всё равно спрашивает, перестаньте смотреть на криптографию и проверьте, не указывает ли профиль файл askpass, который служба всё ещё может прочитать.
Проверьте, может ли эта сборка его расшифровать
OpenSSL 3 разделил поддержку алгоритмов на провайдеры, и набор старых шифров теперь находится в legacy-провайдере, а не в стандартном. Ключ, зашифрованный одним из этих шифров, остаётся действительным, но библиотека, загруженная без legacy-провайдера, не может его декодировать. У одних клиентов это проявляется повторяющимся запросом, у других — жёстким сбоем сразу после парольной фразы.
Разберите один и тот же ключ дважды одним и тем же бинарником: сначала только со стандартным провайдером, затем с legacy и стандартным, запрошенными вместе в командной строке. Если вторая попытка удаётся там, где первая не удалась, диагноз опирается на доказательства, а не на время обновления. Если обе терпят неудачу одинаково, парольная фраза неверна или файл повреждён, и никакая настройка провайдера не исправляет ни того, ни другого.
Проверьте самое узкое доступное исправление
Предпочитайте изменение, ограниченное клиентом, системному. Некоторые сборки 2.6 принимают опцию профиля, которая загружает оба провайдера для процесса этого демона, поэтому сверьте директиву с руководством для вашей точной версии, прежде чем полагаться на неё; редактирование системного openssl.cnf вместо этого затрагивает каждую программу OpenSSL на хосте. Более узкая настройка также гораздо легче отменяется после перекодирования ключа.
Не удаляйте парольную фразу, чтобы запрос исчез. Это превращает защищённые учётные данные в файл открытого текста и незаметно меняет риск каждой резервной копии, копии и пакета поддержки, в которых он появляется. Важное различие — между ключом, которому нужна его парольная фраза, и ключом, который эта библиотека не может декодировать.
Проверьте контекст службы, затем перекодируйте
Как только ключ можно будет разблокировать, перешифруйте его актуальным алгоритмом чтобы зависимость исчезла. Запишите новый файл с современным шифром, убедитесь, что он разбирается, обновите профиль и храните старую копию только до первого успешного подключения. Никогда не помещайте парольную фразу в командную строку, где любой локальный пользователь может прочитать её из списка процессов. Удаляйте старый файл только после того, как новый подключится из служебной учётной записи, а не только из вашей оболочки.
Затем проверьте модуль, который действительно запускает клиент. Ключ, читаемый в вашей оболочке, может быть недоступен службе, работающей под другой учётной записью или с ужесточённой настройкой домашнего каталога.
Запишите настройку провайдера рядом с профилем и держите при ней тест из двух команд. Когда более позднее обновление уберёт legacy-провайдер, запустите этот тест снова, чтобы увидеть, нужен ли он ключу ещё или профиль можно вывести из этого обходного решения.
Запрос — это симптом как минимум с тремя причинами, и только одна из них — отсутствующая парольная фраза.