Сертификат VPN на Mac: почему выбор идентичности остаётся пустым
Клиенту нужен сертификат вместе с закрытым ключом, в хранилище, которое он читает. Сначала проверьте идентичность, затем то, принимает ли её шлюз.
Вы установили сертификат, он отображается в Keychain Access с понятным именем, а список выбора идентичности VPN-клиента по-прежнему пуст. Клиент ищет не сертификат. Он ищет идентичность: сертификат вместе с закрытым ключом, который может подтвердить владение, сохранённый там, где клиенту разрешено его читать.
Клиенту нужна именно идентичность
Платформа безопасности Apple рассматривает сертификат и идентичность как разные объекты. Сертификат — это открытые данные. Идентичность — это тот сертификат вместе с его закрытым ключом, и только идентичность может пройти проверку. Доверенный сертификат CA, напротив, позволяет клиенту оценить издателя; он не делает машину владельцем выданных клиентских учётных данных.
| Item | What it can do | What it cannot do |
|---|---|---|
| CA or server certificate | Validate the gateway's chain | Authenticate this client |
| Client certificate without key | Nothing for authentication | Prove possession of anything |
| Identity (cert plus key) | Answer the authentication challenge | Guarantee the gateway accepts it |
Поэтому импорт файла .cer никогда не создаёт пригодную клиентскую идентичность. Файл содержит только открытые данные, и никакое переименование или доверие не превращает его в пару ключей.
Три причины, почему список остаётся пустым
Первая — отсутствие закрытого ключа, то есть процесс регистрации или импорта его не предоставил. Вторая — хранилище, которое клиент не просматривает: профиль с областью пользователя ищет в связке ключей пользователя, а элемент, помещённый в системное хранилище, может быть для него невидим. Третья — несоответствие назначения или политики, когда сертификат существует, но недействителен для проверки подлинности клиента по правилам развёртывания.
security find-identity -v -p ssl-client
Эта команда перечисляет идентичности, которые система считает действительными для проверки подлинности клиента. Если их число равно нулю, проблема находится выше VPN-клиента, и правка профиля её не исправит. Если идентичность видна здесь, но не в клиенте, разница в хранилище или области клиента.
Где хранится закрытый ключ и кто может им пользоваться
Когда вы импортируете идентичность через Keychain Access, диалог импорта предлагает целевую связку ключей. Какая цель правильна, зависит от клиента и от того, имеет ли профиль область пользователя или устройства. Старый ответ с рекомендацией системной связки ключей не является универсальным правилом, а копирование элементов между хранилищами не является исправлением.
System Roots — это набор доверия. Размещение сертификата там меняет то, каким издателям доверяет система; это не создаёт закрытый ключ и не является хранилищем идентичностей. Перемещение посторонних сертификатов ради заполнения списка — это тот вид исправления, после которого на машине остаётся навсегда расширенный набор доверия.
Доступ к закрытому ключу — отдельный контроль. Разрешение каждому приложению использовать ключ решает проблему выбора одного клиента и передаёт ту же возможность всему остальному на машине. Выдайте его клиенту, которому оно нужно, и проверьте, поддерживается ли ключ аппаратно или помечен как неэкспортируемый; если да, нужно использовать поддерживаемого поставщика, а не экспортированную копию.
Как профиль указывает на учётные данные
В управляемой встроенной конфигурации IKEv2 профиль ссылается на полезную нагрузку учётных данных через PayloadCertificateUUID. Важны указанная идентичность и способ её предоставления; правка отображаемого имени в профиле не исправляет ссылку, указывающую на неверную полезную нагрузку или на ту, что так и не передала ключ.
Сторонний поставщик может использовать совершенно иной механизм выбора, например собственное хранилище или системный запрос. Читайте документацию этого поставщика, а не переносите допущения встроенного профиля, и проверяйте ссылку в профиле, который действительно установлен, а не в черновике консоли управления.
Выбор и принятие — отдельные этапы
Заполненный список означает, что клиент может найти идентичность и воспользоваться ею. Это ничего не говорит о том, примет ли её шлюз. Сервер по-прежнему проверяет издателя, срок действия, статус отзыва и сопоставление этих учётных данных с учётной записью.
Проверьте оба этапа явно, в этом порядке. Убедитесь, что идентичность предлагается, подключитесь, а затем попросите владельца шлюза подтвердить, какие учётные данные были предъявлены и какое правило сопоставления их использовало. Если клиент предлагает идентичность, а сервер её отклоняет, оставшаяся работа на стороне сервера. Переустановка сертификата на Mac не изменит этот результат, сколько бы раз её ни повторяли.