Установка подписанного профиля VPN на iPhone: читайте полезные нагрузки
Подписанный профиль доказывает, кто его собрал, а не что он устанавливает. Пройдите конверт, каждую полезную нагрузку и каждый сертификат, прежде чем доверять VPN или корневому CA.
Профили приходят в «Настройки» с именем, подписантом и кнопкой «Установить», и строку подписанта читает большинство людей. Эта строка отвечает на один вопрос: кто упаковал эти настройки согласно правилам проверки подписи. Она не говорит, что полезная нагрузка VPN указывает на шлюз вашего работодателя, и не говорит, что встроенный корневой сертификат принадлежит вашему хранилищу доверия TLS. Разбор ниже открывает пакет в том порядке, в котором устройство будет его применять.
Начните с конверта: кто подписал этот профиль
В iOS профиль появляется в «Настройки», «Основные», «VPN и управление устройством», а подписант показан над кнопкой «Установить». Прочитайте это имя, прежде чем что-либо нажимать, и спросите себя, та ли это организация, от которой вы ждали настроек. Действительная подпись стороны, которую вы не узнаёте, всё равно остаётся действительной подписью и разрешает её конфигурацию, а не вашу. Тот же экран сообщает и о том, подписан ли профиль вообще.
Если файл у вас на Mac, изучите его до того, как он попадёт в телефон. Инструмент security декодирует конверт CMS и печатает plist, который прочитает устройство, то есть то же содержимое без кнопки «Установить» на пути. Документация Apple о принудительном применении конфигурации описывает подпись как проверку происхождения, и это ровно тот охват, о котором здесь речь.
security cms -D -i corp-vpn.mobileconfig -o corp-vpn.plist
plutil -p corp-vpn.plist
Остановитесь здесь, если подписант не тот, кого вы ждали, или если файл не подписан и пришёл по каналу, который не может за него поручиться. Ничто дальше в этом разборе не делает недоверенный конверт заслуживающим доверия.
Откройте каждую нагрузку и назовите, что она устанавливает
Профиль — это контейнер, а интересная часть — массив PayloadContent внутри него. Каждая запись несёт PayloadType, который говорит, что установит устройство: управляемую конфигурацию VPN, удостоверение PKCS#12, корневой сертификат или регистрацию в управлении. Напечатайте типы, прежде чем читать какие-либо настройки.
plutil -extract PayloadContent xml1 -o - corp-vpn.plist |
grep -E 'PayloadType|PayloadDisplayName'
Нагрузка VPN называет соединение: адрес сервера, метод аутентификации и, возможно, правило для приложения или по требованию. Нагрузка удостоверения поставляет клиентские учётные данные, которые это соединение предъявит. Нагрузка корневого сертификата добавляет якорь доверия, а нагрузка управления передаёт текущий контроль серверу. Это четыре разных обязательства, и подпись покрывает пакет, а не ручается за каждое по отдельности. Читайте их в этом порядке, потому что VPN бесполезен без удостоверения, а удостоверение мало что значит без знания, кто его выдал.
Защита файла паролем — снова отдельное свойство. Зашифрованный пакет скрывает содержимое от того, у кого нет пароля, но не решает, стоит ли разрешать то, что внутри. Относитесь к паролю как к способу доставки, а не как к проверке.
Проследите сертификаты до соединения, которое их использует
Перечислите сертификаты в пакете и сопоставьте каждый с задачей. Клиентский сертификат идентифицирует это устройство перед шлюзом, выпустивший его CA входит в цепочку доверия этого соединения, а корневой сертификат, установленный для прокси или внутреннего сервиса, не является автоматически якорем для каждого сайта HTTPS. В iOS корневой сертификат, установленный вручную, остаётся недоверенным для TLS, пока вы не включите его в «Настройки», «Основные», «Настройки доверия сертификатам», тогда как корневой сертификат, доставленный управлением, доверенный без этого шага. Именно поэтому назначение нагрузки имеет значение.
openssl pkcs7 -inform DER -in corp-vpn.mobileconfig -print_certs -noout
security find-certificate -a -c "Corp Root" -p | openssl x509 -noout -subject -dates
Провайдер, который несёт ваш трафик, не является из-за этого конечной точкой TLS каждого посещаемого сайта. Перехвату нужны путь трафика и якорь доверия, принимаемый приложением, а профиль с одним сертификатом не доказывает ни того, ни другого. Спросите, какое соединение использует сертификат и какие приложения его примут, вместо того чтобы предполагать, что установка профиля расшифровывает всё.
После установки: проверьте и узнайте, что делает удаление
Когда профиль установлен, подтвердите это с устройства, а не из скачанного файла. Экран настроек перечисляет установленный профиль, его подписанта и его нагрузки, а экран VPN показывает, настроено ли соединение как задумано. Удаление скачанного файла ничего не удаляет; установленная конфигурация — отдельный объект.
profiles show -type configuration
scutil --nc list
Если профиль включает регистрацию в управлении, прочитайте последствия удаления до установки, а не после. Удаление этой регистрации забирает связанные конфигурации и может удалить управляемые приложения, в зависимости от того, как было зарегистрировано устройство. Это не шаг починки, который стоит пробовать, когда сертификат выглядит неправильно. Спросите администратора, какая нагрузка отвечает за проблему, прежде чем что-либо удалять.
Разбор заканчивается четырьмя отдельными ответами: кто подписал пакет, какие нагрузки он устанавливает, какое удостоверение и доверие использует каждое соединение и что заберёт с собой удаление. Держите их раздельно, и подписанный профиль становится проверенным решением вместо зелёной галочки.