- Что мы будем разбирать?
- Что такое сертификат?
- "не удается проверить удостоверение сервера" в ios – что делать?
- Что нам понадобится?
- Intermediate certificates
- Вкратце об itunes connect
- Где посмотреть установленные сертификаты ipad
- Идентификаторы (identifiers)
- Кратко о главном
- Обход проверки версии ios и валидации сертификата
- Ориентировка по разделам
- Профили (provisioning profiles)
- Профили типа «development»
- Профили типа «distribution»
- Резюмируем
- Сертификаты (certificates)
- Сертификаты типа «development»
- Сертификаты типа «production»
- Терминология
- Устройства (devices)
Что мы будем разбирать?
Мы разберем процесс управления вашим приложением в Apple Developer Center от его создания до публикации в магазине App Store. Мы будем говорить только о базовых вещах, таких, как разработка, тестирование и публикация, а также обсудим APNs (Push Notifications).
Отмечу тот факт, что далее я буду описывать принцип работы девцентра по состоянию на 31 марта 2021 года, поэтому если вы читаете эту статью позднее — все уже могло измениться.
Что такое сертификат?

Сертификат — это вложение в электронный документ, которое обеспечивает безопасную передачу информации через интернет. Сертификаты используются веб-браузерами и приложениями для обмена электронной почтой и текстовыми сообщениями.
Во время связи с безопасным сайтом обмениваемая с сайтом информация является зашифрованной. Шифрование защищает информацию входа, номера кредитных карточек, адресов и другую конфиденциальную информацию.
В macOS сертификаты являются частью цифровой идентификации и хранятся в связке ключей. Приложение «Связка ключей» помогает управлять связками ключей и сертификатами.
Открыть приложение «Связка ключей»
Сертификаты выдаются доверенными организациями, например корпорациями VeriSign, Inc. или RSA Data Security, Inc. При открытии защищенного веб-сайта система macOS проверяет сертификат сайта по списку надежных сертификатов. Если сертификат веб-сайта не распознан или сайт не имеет сертификата, Вы получите сообщение.
Подлинность сертификата может проверяться электронно с помощью «инфраструктуры открытого ключа» или PKI. Сертификаты состоят из Вашего открытого ключа, идентификации организации, бюро сертификации (БС), которое подписало сертификат, и других данных, связанных с идентификацией.
Обычно сертификат имеет специальное предназначение — например, используется в цифровых подписях, при шифровании или на веб-серверах. Это называется ограничением использования ключа. Можно создать один универсальный сертификат для нескольких целей, но не рекомендуется создавать сертификат, пригодный для любых целей. Универсальный сертификат менее безопасен.
Сертификат действителен только на протяжении определенного срока, по истечении которого сертификат становится недействительным и должен быть заменен более новой версией. Также бюро сертификации может отозвать сертификат, сделав его недействительным до истечения указанного срока.
Если Вам необходимо отправить кому-либо сертификат, Вы можете экспортировать сертификат с помощью приложения «Связка ключей» и переслать его по электронной почте или любым другим способом. Аналогично, если кто-то прислал Вам сертификат, Вы можете добавить его в связку ключей, перетянув на значок «Связка ключей» или воспользовавшись меню «Импорт» данного приложения.
"не удается проверить удостоверение сервера" в ios – что делать?
Всем привет! А вот сегодня я действительно очень сильно испугался. Почему? Просто потому, что заходя на своем многострадальном iPhone в любое приложение (которое требует авторизоваться и ввести пароль) или на любую страничку в браузер, я не смог ничего сделать. Не открывались сайты, не пускало в Qiwi, интернет-банк, App Store и т.д. В зависимости от того, что использовалось на экране, появлялось окно с разными надписями.
Надо отметить, очень непонятными надписями. Некоторые из них, я, многолетний пользователь гаджетов от Apple, вообще видел впервые. Было ощущение, что «сломалось» абсолютно все и наступил какой-то локальный программный апокалипсис. Любая программа, любой сайт, любая игра отказывалась работать. Если говорить подробней, то происходило вот что.
При использовании Safari, выскакивала табличка с ошибкой:
«Не удается проверить удостоверение сервера. Safari не удается проверить удостоверение сертификата. Чтобы продолжить посмотрите подробную информацию сертификата».
И если нажать «продолжить», ничего не происходит.

При этом, если говорить о различных программах, то там тоже не всё гладко — например, Qiwi встретил меня подобным сообщением:
«Сертификат для данного сервера не действителен. Вы подключаетесь к серверу, имитирующему w.qiwi.com, что может подвергнуть риску Вашу конфиденциальную информацию».
Хотя, конечно же, ни к какому «имитирующему серверу» я точно не подключался.
Более того — я даже не знаю, что это такое!:)

Думаю ладно, iPhone — это полбеды, и полез проверять на iPad, а там…
Всё тоже самое.
Сначала я подумал, что вирус какой-нибудь подхватил. Но с другой стороны, если подумать здраво, то это маловероятно, чтобы вирус появился сразу на обоих устройствах, да и нет такого «вредителя» на iOS. И вот здесь появился вопрос, что делать-то? Как избавиться от этого недоразумения и откуда оно взялось? Начал вспоминать и…
А потом пришло озарение:)
Как оказалось, всё очень просто и никакие вредоносные программы тут ни при чём. Дело в том, что для подготовки красивых скриншотов и написания одной статьи, мне пришлось отматывать дату на несколько лет назад. А затем… совершенно верно! Я забыл выставить её обратно.
Так что подобные проблемы с «недействительными и не проверенными сертификатами» в браузере Safari и прочих приложениях решаются достаточно просто — необходимо всего лишь установить корректную дату на iPhone или iPad (ну, и на всякий случай, перезагрузить устройство). После этой процедуры ошибки пропадут и все заработает как прежде!
P.S. Поддержи автора и избавь его от забывчивости — ставьте «лайки», пишите в комментарии (что получилось, а что — нет) и жмите на кнопки социальных сетей. Всем спасибо, всех обнял!:)
Что нам понадобится?
Собственно, для работы нам нужно следующее:
Intermediate certificates
Некоторое время назад Apple внесла изменения в логику работы девцентра и своей системы сертификации, после чего на большинстве компьютеров пропала возможность делать сборки приложений, несмотря на наличие активных дев- и прод-сертификатов и актуальных профилей.
«Worldwide Developer Relations Certificate Authority»
. Он устанавливается автоматически с новыми версиями Xcode, но те, у кого Xcode уже был установлен ранее, просто должны были установить этот сертификат вручную, скачав его по прямой ссылке из секции Intermediate Certificates в девцентре Apple, после чего проблемы со сборками исчезали. Больше никакой смысловой нагрузки этот сертификат не несет.
Вкратце об itunes connect
Этот сервис предоставляет вам возможность управлять внутренним и внешним тестированием в TestFlight, а также выкладывать приложение в App Store. Рассмотрение этого процесса выходит за рамки данной статьи, упомяну лишь тот факт, что для корректной работы этому сервису необходимы сборки, созданные на базе профиля типа
Distribution — App Store
(для iOS либо tvOS). Другие типы профилей здесь не поддерживаются.
Где посмотреть установленные сертификаты ipad
Центр сертификации WoSign испытал несколько неудач контроля в процессе выдачи сертификатов для WoSign CA и бесплатный SSL-сертификат Г2 промежуточных ЦС. Хотя нет WoSign корень в списке Яблока доверенных корней, этот промежуточный ca используется кросс-подписал отношений сертификат StartCom и Comodo для установления доверия на продукцию Apple.
В свете этих выводов, мы приняли меры, чтобы защитить пользователей в обновлении безопасности. Продукты Apple больше не доверяют WoSign CA и бесплатный SSL-сертификат Г2 промежуточных ЦС.
Чтобы избежать нарушения существующих владельцев сертификатов WoSign и обеспечить их переход на доверенных корней, продуктов доверие индивидуальных действующих сертификатов Apple, которые были выпущены из этого промежуточного центра сертификации и опубликована прозрачности сервера сертификат отчет по 2021-09-19. Они будут продолжать доверять до истечения срока их действия, аннулирования или недоверенные по усмотрению компании Apple.
По ходу расследования мы будем принимать дальнейшие действия по WoSign/StartCom якорей доверия в продукции Apple как необходимые для защиты пользователей.
Дальнейшие шаги для WoSign
После дальнейшего расследования, мы пришли к выводу, что помимо множественных отказов управления в деятельности центра сертификации WoSign (Калифорния), WoSign не раскрывает приобретения StartCom.
Мы предпринимаем дополнительные меры для защиты пользователей в следующем обновлении безопасности. Продукты Apple будет блокировать сертификатов от WoSign и StartCom корневых ЦС, если «не до этого» дата после 1 декабря 2021 00:00:00 по Гринвичу/по Гринвичу.
Идентификаторы (identifiers)
Данный раздел обеспечивает управление идентификаторами. Для вашего приложения в минимальном исполнении понадобится App ID, управление которыми доступно в одноименном подразделе.
В буквальном переводе «App ID» означает «идентификатор приложения», что полностью отражает его суть. Любое ваше приложение, которое вы хотите отлаживать на устройстве Apple, тестировать через TestFlight и/или публиковать в магазин App Store, должно обладать собственным уникальным именем, по которому его можно однозначно идентифицировать среди тысяч других приложений. При добавлении нового App ID вам будет предложено ввести несколько элементов:
- App ID Description. Имя вашего приложения. К примеру, если ваше приложение называется Mail Printer, то прямо так его и записываем в это текстовое поле.
- App ID Prefix. Префикс вашего приложения, он выдается вам автоматически и будет общим для конкретной команды Apple Team, где подключена и активна Apple Developer Program.
- App ID Suffix. Здесь нам понадобится выбрать Explicit App ID, чтобы указать бандл (bundle) приложения. Это идентификатор, обычно имеющий вид com.mycompany.myappname, где mycompany — имя вашей компании или вашего домена. Например, com.homecompany.MailPrinter. Обращаю ваше внимание, что точно такой же бандл должен быть выставлен в настройках таргета (Target) вашего приложения в Xcode (секция настроек General, поле Bundle Identifier).
- App Services. Здесь вам нужно отметить те сервисы, которые вы планируете использовать в вашем приложении. По умолчанию там отмечены только Game Center и In-App Purchase, их использование обязательно, удалить их нельзя. Остальные сервисы подключайте по мере необходимости.
После создания App ID вы можете использовать его для генерации любых типов профилей, об этом чуть позже.
Кратко о главном
В Apple Developer Center с незапамятных времен применяется довольно мудреная система сертификации ваших приложений на каждом из ключевых этапов — разработка, тестирование и публикация.
Зачастую при первом погружении в эту систему у начинающих (и не только) разработчиков возникают серьезные проблемы с пониманием того, как функционирует Apple Developer Center (будем называть его «девцентр» для простоты). В результате, мне в процессе профессиональной деятельности не раз приходилось наблюдать на новых местах работы огромные свалки из профилей и сертификатов в девцентре, в результате чего приходилось приступать к «разбору завалов».
При этом, в сети довольно не такой большой выбор материалов на эту тему. Конечно, в официальной документации Apple все хорошо структурировано и очень подробно описано, но зачастую просто не хватает времени на изучение такого количества материала.
Как правило, хочется быстро понять, что именно и в каком порядке нужно сделать для корректной работы приложения на этапах разработки, тестирования и при публикации его в магазин App Store. В русском же сообществе подобных материалов, собранных в одном месте и в удобном доступе, я не видел вовсе, поэтому и решил написать эту статью. Для всех интересующихся — добро пожаловать под кат.
Обход проверки версии ios и валидации сертификата
Некоторые iOS-приложения проверяют версию операционной системы на устройстве. Недавно, во время тестирования одного приложения, я как раз и столкнулся с подобной проверкой. Если версия iOS была ниже 7.1, приложение не устанавливалось, и вываливалась ошибка.
Автор: Vikram Kulkarni
Некоторые iOS-приложения проверяют версию операционной системы на устройстве. Недавно, во время тестирования одного приложения, я как раз и столкнулся с подобной проверкой. Если версия iOS была ниже 7.1, приложение не устанавливалось, и вываливалась ошибка.
В этой статье будут рассмотрены следующие темы:
- Изменение версии iOS в файле SystemVersion.plist.
- Изменение версии в plist-файле, находящимся в пакете приложения.
- Использование утилиты «iOS-ssl-Kill switch» для обхода валидации сертификата.
Изменение версии iOS в файле SystemVersion.plist
Версия iOS может быть изменена (на джейлбрейковом устройстве) в два простых шага посредством изменения соответствующего значения в файле SystemVersion.plist:
- Подключаемся к джейлбрейковому устройству по протоколу SSH (или используем ifile, доступный в cydia) для просмотра содержимого системной директории.
- Изменяем значение ‘ProductVersion’ в файле ‘/System/Library/CoreServices/SystemVersion.plist’.

Рисунок 1: Содержимое файла SystemVersion.plist
Этот трюк позволяет изменить значение, отображаемое в разделе ‘Settings/General/about’. Однако метод сработает лишь для тех приложений, которые проверяют версию в файле SystemVersion.plist. Если после изменения версии, приложение все равно отказывается работать, используйте второй метод.
Изменение версии в plist-файле, находящимся в пакете приложения
Второй метод, позволяющий изменить версию, состоит из трех простых шагов:
- Переименовываем файла ipa в .zip и распаковываем архив.
- Изменяем значение ‘minimum ios version’ в файле info.plist, который обычно находится в папке Payloadappname.app.
- Упаковываем архив и переименовываем его обратно в ipa. [Примечание: некоторые приложения проверяют значение ‘minimum ios version’ в других plist-файлах, находящихся в пакете].

Рисунок 2: Содержимое файла info.plist
После изменения plist-файлов нарушается подпись пакета. Для решения этой проблемы, необходимо зарегистрировать IPA при помощи утилиты из этой статьи.
Некоторые приложения проверяют версию iOS во время установки. Когда пользователь устанавливает приложение при помощи iTunes или xcode, используя IPA, происходит проверка версии iOS, запущенной на устройстве, и если версия ниже, чем требуется, появляется ошибка.

Рисунок 3: Ошибка, возникающая при установке приложения через xcode
Подобная проверка также обходится в несколько шагов:
- Переименовываем файл .ipa в .zip и извлекаем папку .app.
- Копируем папку .app туда, где установлены iOS приложения (/root/application) при помощи любого SFTP-клиента (например, WinSCP).
- Подключаемся к устройству через SSH, заходим в папку, где установлен IPA, а затем ставим права на запуск у папки .app (chmod -R 755 или chmod -R 777). Альтернативный способ – кликнуть правой кнопкой мыши на папке .app в WinSCP и изменить свойства директории, установив соответствующие права.
- После перезапуска iOS устройства приложение будет успешно установлено.

Рисунок 4: Установка новых прав для директории
Обход валидации сертификата
Некоторые приложения проверяют сертификат для предотвращения проксификации трафика при помощи утилит наподобие Burp. Обычно в бинарном файле приложения намертво зашит клиентский сертификат. Сервер проверяет этот сертификат, и если валидация заканчивается неудачно, возникает ошибка. Более подробно об этом можно почитать в другой моей статье в соавторстве со Стивом Керном.
Иногда бывает трудно извлечь сертификат из приложения и установить его внутрь прокси. Альтернатива – использовать утилиту ios-ssl-kill-switch. ios-ssl-kill-switch цепляется к Secure Transport API (самый низкий уровень) и отключает проверку сертификата. Большинство проверок используют NSURLConnection на более высоком уровне. Больше подробностей можно узнать здесь.
Проверка сертификата обходится в несколько шагов:
- Устанавливаем утилиту kill-ssl-switch.
- Все зависимые пакеты должны быть установлены заранее.
- Перезапускаем устройство или перезапустите SpringBoard при помощи следующей команды ‘killall -HUP SpringBoard’.
- Устанавливаем опцию Disable Certificate Validation в разделе ‘Settings/SSL Kill Switch’.
- Перезапускаем приложение, после чего трафик должен перехватываться успешно.
Привязка сертификата (Certificate pinning) обходится путем подцепления к API, выполняющего валидацию сертификата, и постоянного возвращения «истины» при проверке. Для решения этой задачи вполне подойдет фреймворк Mobilesubstrate. Существует несколько других полезных утилит для отключения привязки, например ‘Trustme’ и ‘Snoop-it’.

Рисунок 5: Отключение проверки сертификата в SSL Kill Switch
Ориентировка по разделам
В девцентре для полноценной работы с вашими приложениями нам понадобятся только два пункта:
Профили (provisioning profiles)
Дословно название этого раздела переводится как «Профили обеспечения». Чуть более развернуто я бы описал понятие «профиль» как «Специальный файл, обеспечивающий доступ к некоторой функциональности в конкретной сборке вашего приложения». В данном разделе девцентра вы можете управлять вашими профилями, обеспечивая себе возможность выпускать сборки приложения для различных целей, то есть «профилировать» его. По сути, профиль является результатом объединения двух (иногда трех) компонентов:
На выходе как раз и получаем профиль для выпуска сборок с определенными целями. Давайте рассмотрим разновидности профилей.
Профили типа «development»
Это профиль для разработки, то есть его основное назначение — отладка вашего приложения на конкретных устройствах через Xcode с прямым подключением устройства проводом к вашему Mac. Дев-профили представлены двумя видами:
Профили типа «distribution»
Эти профили используются для выпуска сборок вашего приложения для различных целей. Продакшн-профили представлены четырьмя видами:
- App Store. Используется для тестирования (как внутреннего, так и внешнего) в TestFlight, а также для выпуска приложения в App Store.
- tvOS App Store. Аналогично предыдущему, только для tvOS.
- Ad Hoc. Требует указания перечня разрешенных устройств из раздела Devices.
Используется, если вы хотите выпустить сборку, которую можно будет поставить в режиме «Production», но только на некоторых устройствах. Реальная ситуация, когда это может понадобится, например, следующая. Вы разрабатываете приложение, а в процессе работы заказчик попросил у вас «дать ему пощупать приложение» на своем Apple-устройстве. В iTunes Connect для активации внешнего тестирования вы еще выходить не готовы, но просьбу заказчика нужно выполнять — вот тут как раз и пригодится Ad Hoc-профиль, сгенерированный на базе прод-сертификата App Store & Ad Hoc Production Certificate. Важный момент: в моем случае часто возникали проблемы при экспорте сборок подобным способом, если в Xcode не был также установлен и Development-сертификат. Ошибки были разного рода, от невозможности подписать сборку до абсурдного «App ID is not available», хотя это фактически не так (замена на другой бандл ничего не давала). Поэтому, по моему предположению, для удачного экспорта Ad Hoc-сборок необходимо, чтобы, помимо Ad Hoc-профиля, был также установлен и дев-сертификат с соответствующим профилем. - tvOS Ad Hoc. Аналогично предыдущему, только для tvOS.
Резюмируем
По сути, при получении доступа к девцентру с активной Apple Developer Program ваш алгоритм действий должен сводиться к следующему:
Сертификаты (certificates)
Этот раздел дает доступ к управлению сертификатами, которыми обладает ваша учетная запись Apple ID. Каждый из этапов, которые вы будете проходить, будь то разработка, тестирование или публикация, включая все значимые составляющие экосистемы Apple вроде Push Notifications, требует обязательного наличия актуального (действующего, Active) сертификата.
Теперь разберем типы сертификатов.
Сертификаты типа «development»
В первую очередь, нужно знать, что девелоперский сертификат всегда привязывается
к одной конкретной машине
. Поэтому для отладки на вашем Mac вам понадобится доступ к этому сертификату. Тут есть варианты. Например, если, вы устроились на работу iOS-программистом, и в ваши задачи входит отладка на устройствах (как правило, так и есть), то есть два пути решения (какой из них выбирать — зависит от вас и условий работы в вашей компании):
Сертификаты типа «production»
Для начала на всякий случай поясню, что сборкой iOS-приложения называют *.ipa-файл, архив, выпускаемый с соблюдением правил сертификации Apple через команду Project — Archive в Xcode.
Теперь о сертификации. Прод-сертификаты обеспечивают функционирование различных подсистем приложения в «боевых» условиях, то есть в магазине App Store, а также на устройствах, где выполняется внутреннее и внешнее тестирование приложения через TestFlight.
Здесь, по аналогии с Development-сертификацией, есть тип App Store & Ad Hoc Production, а также тип APNs Production, использующийся веб-сервером для рассылки push-уведомлений. Если вы планируете выпустить приложение, поддерживающее работу с пушами, то вам понадобятся оба сертификата, как App Store &
Ad Hoc (на основе которого вы сделаете сборку и отправите приложение в iTunes Connect), так и APNs Production (его вы отдадите серверу, а тот воспользуется им для получения прав на рассылку пушей). В довесок к уже упомянутым подсистемам есть еще несколько других, обеспечивающих доступ к Wallet, Apple Watch и так далее, но их обзор выходит за рамки данной статьи.
Очень часто возникает вопрос о том, в чем же разница между App Store и тем самым Ad Hoc. Ранее они были представлены разными сертификатами, с некоторого времени Apple объединила их в единое целое, за что им большое спасибо. Чуть подробнее об этих разновидностях:
- Выпуск сборок типа App Store. Обеспечивает возможность тестировать приложение в TestFlight, как в режиме внутреннего, так и в режиме внешнего тестирования. Также дает возможность опубликовать приложение в App Store.
- Выпуск сборок типа Ad Hoc. Термин «Ad Hoc» можно перевести как «специальный», «для конкретной цели». Такой тип сертификации обеспечивает возможность запускать ваше приложение (включая все нужные подсистемы типа APNs) в боевых условиях, но только на конкретных девайсах, и без участия Xcode в процессе запуска. Другими словами, Ad Hoc необходим, если вы захотите поставить ваше приложение на стороннее устройство, не имея к нему прямого доступа (то есть не подсоединяя его проводом к вашему Mac, так как в этом случае вам бы хватило Development-сертификата), но при этом и не выкладывая приложение в iTunes Connect. Такой сертификат используется при создании специального Ad Hoc-профиля, о котором пойдет речь чуть позже.
Еще один частый вопрос: чем отличаются сборки, собранные на паре Development Certificate Development Profile, и сборки, созданные через связку Distribution Certificate Ad Hoc Profile? Ведь и там, и там нужно указывать перечень разрешенных для установки устройств, и то, и то можно устанавливать через iTunes.
В чем же различие? На деле, разница в том, что дев-сборка будет запускаться «в отладочном режиме», то есть, например, APNs ей будут доступны только в режиме «sandbox». Продакшн-сборка будет обладать «боевыми» правами, с доступом во все подсистемы Apple вроде «настоящих» APNs, iCloud и так далее.
Терминология
Давайте подробно разберем понятия, лежащие в основе функционирования девцентра Apple.
Устройства (devices)
В этом разделе размещено управление всеми устройствами Apple, которые вы можете использовать в рамках вашей Apple Developer Program. Есть ограничение, максимум 100 зарегистрированных девайсов одного типа (iPhone, iPad и так далее) на одну учетную запись в год, обычно этого более чем достаточно.
