Список доступных доверенных корневых сертификатов в iOS 15, iPadOS 15, macOS 12, tvOS 15 и watchOS 8 – Служба поддержки Apple (RU)

Apple, боль и сертификаты

Знакомьтесь, Боб — матёрый ios разработчик, Алиса — не менее матёрая тестировщица. Дело было вечером дело было в пятницу. Боб дофиксил багу, вроде бы протестил на своих девайсах. Затем Боб запускает уже отточенные до автоматизма команды:

git checkout develop
git merge bug_fix_#999
git checkout master && git merge develop --no-ff ....
git push ....

На пуш на сервере срабатывает jenkins/teamcity/travis, который запускает билд. В это же самое время наш Боб пишет Алисе, что скоро пойдет домой, и хочет, чтобы аппа ушла сегодня в app store на апрув, дабы выиграть лишние пару дней, так как на носу выходные, если, конечно, приложение пройдет ручное тестирование Алисы.

Приложение Боба довольно обычное: пару сотен компилируемых класс файлов, еще с десяток cocoapods зависимостей ну и кучка сторибордов — Боб ценит своё время и время коллег поэтому не пишет UI в коде. Боб знает, что его приложение с чистого старта на сервере собирается за 4 минуты для develop версии, которое идет на тест Алисе, и столько же или чуть больше для production версии. Боб также знает, что ему нужно около 10 минут, чтобы дождаться окончания полной сборки и затем сообщить Алисе, что она может приступать к тестированию. Боб человек ответственный, поэтому по истечении 10 минут после пуша проверяет статус билда, так как знает, что сервер — это отдельный параллельный мир со своими правилами, законами и странностями.

Пятница, вечер, Боба отделяет от долгожданных выходных только 10 минут, после которых передаст эстафету Алисе. Боб вбивает в сафари bobcompany.ci/dashboard, где видит красную лампочку напротив своего приложения, глаза Боба потускнели, разочарованию не было предела. Боб жмет на show more, где его встречает ошибка:

Code Sign error: No codesigning identities found: No codesigning identities (i.e. certificate and private key pairs) that match the provisioning profile specified in your build settings (“com.company.bob”) were found.

Тут нервы Боба совсем сдают:

Список доступных доверенных корневых сертификатов в iOS 15, iPadOS 15, macOS 12, tvOS 15 и watchOS 8 - Служба поддержки Apple (RU)

*Кратко об ошибке, она проявляется, когда мы пытаемся подписать приложение несуществующим сертификатом, под несуществующим понимается или он не установлен на машине, или он устарел и mobileprovision заведен на более свежую версию сертификата того же аккаунта для того же бандла.

И самое обидное, что эта ошибка только для production версии билда, который запускается вторым после develop версии, причем, сначала xcode компилирует зависимости (cocoapods) и уже только после проверяет валидность подписи, то есть только когда собирает основное приложение. Поэтому ошибка проявляется примерно во второй половине процесса сборки, из-за чего первые 6-7 минут потрачены в пустую, от чего Боб расстроен еще больше.

Про сертификаты:  Установка корпоративных программ в ОС iOS - Служба поддержки Apple (RU)

Наш разработчик Боб не первый раз сталкивается с этой проблемой, ведь он работает в большой компании, где несколько команд ios разработчиков, где нормальная практика для разработки использовать один Apple аккаунт на несколько человек. Да, Боб знает про Xcode плагин https://github.com/neonichu/FixCode, но ведь не заставлять же его насильно всем ставить, разработчики нежные создания, не все любят, когда их заставляют что-то делать против их воли, Боб сам такой.

Бобу всё это настолько надоело, что он уже забыл, что собирался домой 10 минут назад, вместо этого Боб заказывает пиццу, расчехляет макбук, который уже успел упаковать, наливает кофе, просит админов дать доступ до сервера, коннектится туда по ssh и начинает выяснять, в чем же, именно, проблема и как её можно решить.

Ну окей. Первым делом Боб проверяет какие сертификаты, вообще, есть на машине:

security find-identity -v login.keychain

Что выдает

  1) 40948A3CA3527F580B9ECB2131DE6B1938FB3D7C "iPhone Developer: Mike ... (KSDA3C3QF2)"
  2) 0279CB81AEAD8CE015282DD1FA76CE520A815C4D "iPhone Developer: Bob .. (4WT74HLM2M)"
  3) 79A2544B1A63C3F9D3DA3FFAB199FEAADB7EC306 "iPhone Developer: Alica ... (VJ53F2J4EK)"
  ....
     24 valid identities found

Так, как минимум, в keychain, который используется по дэфолту на сервере, есть 24 сертификата. Боб знает, что каждый mobileprovision файл создается на какой-то один конкретный сертификат. Нужно выяснить на какой сертификат создан mobileprovision файл для которого упал билд и понять, что же произошло с сертификатом. Нужно, вообще, понять как mobileprovision файл связан с сертификатом. Боб знает, что develop версия приложения собралась, поэтому на сервере точно есть этот сертификат и сейчас нужно понять как он соотносится с mobileprovision файлом. Для этого Бобу нужно найти mobileprovision файл и данные о сертификате, чтобы начать искать какие-то соответствия между ними.

Ищем mobileprovision файл по его бандлу (если ваш бандл wildcard, то можно искать по любым другим признакам):

cd ~/Library/MobileDevice/Provisioning Profiles
find . -name "*.mobileprovision" -type f -exec grep -H -n -a {} -e "com.company.bob" ;

Отлично, мы нашли наш файл:

./f98a06f3-21c2-4de0-975f-5df74197c731.mobileprovision:30:		<string>4HUHB9J47M.com.company.bob</string>

В файле есть префикс 4HUHB9J47M у бандла. Из ранее полученного списка сертификатов ничто с этим значением не совпадает. Поэтому Бобу приходится идти в developer.apple.com и искать на какой же аккаунт создан этот mobileprovision файл. Методом тыка он выясняет, что это сертификат Майка:

2) 40948A3CA3527F580B9ECB2131DE6B1938FB3D7C "iPhone Developer: Mike .. (KSDA3C3QF2)"

Отлично, теперь у нас есть с чем работать. Боб у нас не криптоаналитик или секурити ресерчер, но он хороший гуглер, поэтому он с легкостью нашел способ как получить необходимую информацию из сертификата.

Про сертификаты:  DUKER | Безраструбные SML трубы Дюкер | SML-SYSTEM

Вытаскиваем данные в .pem файл:

security find-certificate -p -c "iPhone Developer: Mike .. (KSDA3C3QF2)" > cert.pem

В файле получаем следующее:

-----BEGIN CERTIFICATE-----
MIIFnjCCBIagAwIBAgIIN8GwnYhLQ/kwDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNV
BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
...
....
.....
lD ocFo6 mab/Ph6mTJOZkZu hnqhzbTD9Q9dXKWkeXAwTqaESNfnhnuOdfCX3vu
YAz0Hb46G9fkLa5lHjVydbtms685C uz9Ss4GNRfji1cz5KyblAQAAsqQBUiCwnb
z34=
-----END CERTIFICATE-----

Как оказалось, с этого файла можно считать информацию о сертификате, попробуем получить наиболее интересную для нас:

openssl x509 -noout -fingerprint -in cert.pem

Выдает нам:

SHA1 Fingerprint=40:94:8A:3C:A3:52:7F:58:0B:9E:CB:21:31:DE:6B:19:38:FB:3D:7C

Если убрать двоеточия, то получим 40948A3CA3527F580B9ECB2131DE6B1938FB3D7C, это как раз sha1 сертификата Майка, который мы можем увидеть в UI в Keychain:

Список доступных доверенных корневых сертификатов в iOS 15, iPadOS 15, macOS 12, tvOS 15 и watchOS 8 - Служба поддержки Apple (RU)

Мы также можем получить срок действия сертификата, если нужно написать валидатор истёкших сертификатов:

openssl x509 -noout -startdate -in cert.pem // Feb 27 07:13:41 2021 GMT
openssl x509 -noout -enddate -in cert.pem // Feb 26 07:13:41 2021 GMT

Это же мы видим и в keychain:

Список доступных доверенных корневых сертификатов в iOS 15, iPadOS 15, macOS 12, tvOS 15 и watchOS 8 - Служба поддержки Apple (RU)

В общем с сертификатом всё ясно. «Как же его привязать к нашему mobileprovision файлу?» — думает любопытный Боб. Давайте сначала посмотрим на mobileprovision файл поближе:

Список доступных доверенных корневых сертификатов в iOS 15, iPadOS 15, macOS 12, tvOS 15 и watchOS 8 - Служба поддержки Apple (RU)

security cms -D -i f98a06f3-21c2-4de0-975f-5df74197c731.mobileprovision 

Вывод нам дает интересную информацию для поля data, а именно:

<data>
MIIFnjCCBIagAwIBAgIIN8GwnYhLQ/kwDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNV
BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1
...
...
YAz0Hb46G9fkLa5lHjVydbtms685C uz9Ss4GNRfji1cz5KyblAQAAsqQBUiCwnb
z34=
</data>

Где-то это Боб уже видел, похоже на содержание ранее полученного .pem файла:

-----BEGIN CERTIFICATE-----
MIIFnjCCBIagAwIBAgIIN8GwnYhLQ/kwDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNV
BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
...
....
.....
lD ocFo6 mab/Ph6mTJOZkZu hnqhzbTD9Q9dXKWkeXAwTqaESNfnhnuOdfCX3vu
YAz0Hb46G9fkLa5lHjVydbtms685C uz9Ss4GNRfji1cz5KyblAQAAsqQBUiCwnb
z34=
-----END CERTIFICATE-----

Список доступных доверенных корневых сертификатов в iOS 15, iPadOS 15, macOS 12, tvOS 15 и watchOS 8 - Служба поддержки Apple (RU)

Тут Боб понял, вот она зацепка mobileprovision файла на сертификат.

Итого, нам нужно взять наш mobileprovision файл, вытащить из него значение для поля data, затем пробежать по всем валидным сертификатам и сравнить с данными из их .pem представления. Боб тут же накидал небольшой скрипт, который передал коллегам из бэкенда, чтобы они его запускали перед каждой сборкой ios проектов. Скрипт запускается достаточно просто:

ruby cert_checker.rb f98a06f3-21c2-4de0-975f-5df74197c731.mobileprovision

Теперь разработчики могут быстро получить фидбэк от сервера, если с сертификатами что-то не так. Да и вообще впустую не запускать сборку до решения проблемы.

Включение доверия для профилей сертификатов в ios и ipados, установленных вручную

В iOS 10.3 и более поздних версий, а также в iPadOS при ручной установке профиля, содержащего полезную нагрузку сертификата, этот сертификат не становится доверенным для SSL автоматически. 

Недоверенные сертификаты

Название сертификатаКем выданТипРазмер ключаАлгоритм подписиСерийный номерСрок действияПолитика EVОтпечаток пальца (SHA-256)

TRIAL PKIoverheid Organisatie TEST CA – G2

TRIAL PKIoverheid TEST Root CA – G2

RSA

4096 бит

SHA-256

01 31 05 FF

16:00:39 24.03.2020 г.

Не EV

EA 0E AA 71 08 93 CC 16 04 7B F2 1C 62 4B DC 6F 0A 7C F1 10 67 52 E9 AD AE B0 19 BB 90 D9 EB 1F

Про сертификаты:  Когда ДС не нужна | Растаможить груз в CПб

Проверка соответствия стандартам fips 140

Национальный институт стандартов и технологий США (National Institute of Standards and Technology, NIST) учредил программу проверки криптографических модулей (CMVP), позволяющую проверять соответствие криптографических модулей федеральным стандартам обработки информации (FIPS)

Стандарты FIPS 140-2 посвящены именно требованиям к безопасности криптографических модулей. Стандарты описывают четыре качественных уровня безопасности по возрастанию: уровень 1, уровень 2, уровень 3 и уровень 4. Эти уровни могут применяться к различным возможным ситуациям применения и средам, в которых могут быть задействованы криптографические модули. Полное описание каждого уровня можно найти в публикации FIPS 140-2 на веб-сайте NIST (публикация FIPS 140-2).

Криптографические модули, прошедшие проверку на соответствие FIPS 140-2, принимаются к использованию федеральными агентствами обеих стран для защиты конфиденциальной информации.

На веб-портале CMVP приводятся полные сведения о программе, обо всех связанных с ней стандартах и документах, а также официальные списки криптографических модулей, прошедших проверку по стандартам FIPS 140-1 и FIPS 140-2.

Проверки криптографических модулей

Сведения о хранилище доверия и сертификатах

В каждом хранилище доверия содержится три категории сертификатов.

Выполните следующие действия, чтобы найти версию хранилища доверия, установленного на вашем устройстве iOS или iPadOS.

  1. Перейдите в меню «Настройки» > «Основные» > «Об устройстве».
  2. Прокрутите список до конца.
  3. Выберите пункт «Настройки доверия сертификатов».

Выполните эти действия, чтобы найти версию хранилища доверия, установленного на компьютере Mac.

  1. В приложении Finder выберите пункт «Переход» > «Переход к папке».
  2. Введите или вставьте «/Система/Библиотеки/Security/Certificates.bundle/Contents/Resources/TrustStore.html» и нажмите «Перейти».
  3. В появившейся папке откройте TrustStore.html. Версия хранилища доверия находится в правом верхнем углу страницы.

В статье перечислены сертификаты для хранилища доверия версии 2020082800, которая является текущей для iOS 14.2 и более поздних версий, iPadOS 14.2 и более поздних версий, macOS 11 и более поздних версий, tvOS 14.2 и более поздних версий, а также для watchOS 7.1 и более поздних версий. Сведения о хранилищах доверия для других версий iOS, macOS, tvOS и watchOS см. в этой статье.

Сертификация по общим критериям

Общие критерии, международный утвержденный набор стандартов безопасности, обеспечивают понятную и точную оценку возможностей информационных технологий в области безопасности. Сертификация по Общим критериям позволяет получить независимую оценку соответствия продукта стандартам безопасности, тем самым давая клиентам большую уверенность в безопасности информационных технологий и возможность принимать более взвешенные решения.

Подписав соглашение о признании Общих критериев (CCRA), двадцать шесть государств-членов согласились признавать сертификацию информационных технологий с одинаковым уровнем доверия.

  1. Инструменты проверки безопасности через интерфейс командной строки встроены в ОС Mac OS X 10.6 и более поздних версий. См. «Руководство по администрированию».
  2. Эта версия ОС Mac OS X не отправлялась на сертификацию по Общим критериям.
Оцените статью
Мой сертификат
Добавить комментарий