Доступ к корневому сертификату Apple на iOS - PullRequest
5 голосов
/ 30 марта 2012

Я нашел следующий код: https://github.com/roddi/ValidateStoreReceipt/blob/master/validatereceipt.m, который загружает корневой сертификат («Apple Root CA») на MacOS

, и я пытаюсь заставить его работать и на iOS.

Наш код написан на C ++ и использует OpenSSL для проверки удаленного узла при использовании сокетов SSL.

На других платформах мы загружаем корневой сертификат и добавляем их в контекст, используя * 1009.* X509_STORE_add_cert .

Затем мы используем SSL_get_peer_certificate и проверяем имя хоста.Это НЕ самозаверяющие сертификаты, поэтому мы хотим использовать корневой сертификат устройства.

Мой вопрос: как получить корневой сертификат на устройствах iOS?

РЕДАКТИРОВАТЬ:

Я пробовал следующий запрос, но получаю -25300 (errSecItemNotFound).

NSDictionary* query=[NSDictionary dictionaryWithObjectsAndKeys:
                     (__bridge id)kSecClassCertificate,kSecClass,
                     kCFBooleanTrue,kSecReturnRef,
                     kSecMatchLimitAll,kSecMatchLimit,
                     kCFBooleanTrue,kSecMatchTrustedOnly,
                     nil];
SecItemCopyMatching((__bridge CFDictionaryRef)query,&ref);

Ответы [ 2 ]

3 голосов
/ 08 апреля 2012

Вам нужно что-то в этом духе:

  • Найдите сертификаты, используя SecItemCopyMatching() с kSecMatchTrustedOnly, установленным на kCFBooleanTrue.Помните, что это будет много сертификатов , а не только один.
  • Затем экспортируйте их в формат DER с помощью SecCertificateCopyData().
  • Импортируйте их в OpenSSL
  • Прибыль

Кроме того, вы можете пойти другим путем:

  • Преобразовать сертификат в DER с помощью OpenSSL
  • Создать SecCertificateRef с помощью SecCertificateCreateWithData()
  • Создание SecPolicyRef с SecPolicyCreateSSL()
  • Создание SecTrustRef с SecTrustCreateWithCertificates()
  • Оценка с SecTrustEvaluate()
  • Прибыль

Или, конечно, вы также можете управлять SSL-соединением с NSURLConnection или CFNetwork (доступно непосредственно в C ++), и система сделает все за вас автоматически.По возможности, я рекомендую не использовать OpenSSL на iOS, потому что это создает много сложностей.Но вышеупомянутое должно помочь вам соединиться, если вам нужно.

1 голос
/ 06 апреля 2012

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

Подробнее об этом читайте в iPad in Business , прокрутите вниз до раздела Distributing and Installing Certificates.

РЕДАКТИРОВАТЬ : поиск сертификата

Чтобы найти элемент цепочки для ключей, вы можете использовать SecItemCopyMatching , предоставляя kSecClassCertificate и kSecAttrLabel.Оформить заказ Поиск сертификата в связке ключей в Задачи сертификатов, ключей и служб доверия для iOS

...