2013-06-24 5 views
4

Я хотел бы сделать запрос https с сервером, требующим аутентификацию сертификата клиента. Я заглянул в это Creating a SecCertificateRef for NSURLConnection Authentication Challenge. Он работал, как ожидалось.Возможно ли сгенерировать запрос подписи сертификата (.csr) с использованием инфраструктуры безопасности в ios?

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

Однако может быть другой вариант. Это ios-клиент должен сделать запрос подписи сертификата (.CSR) и позволить третьей стороне (это сервер) подписать его.

Для поиска я могу использовать SecKeyGeneratePair() для генерации пары ключей. Но я не вижу API, который генерирует CSR.

Действительно ли это необходимо для того, чтобы добиться этого?

Кроме того, немного не по теме, как только ios-клиент каким-то образом вернет подписанный сертификат. Я могу использовать SecCertificateCreateWithData() для извлечения SecCertificateRef(). Однако, чтобы заполнить NSURLCredential. Мне также нужен SecIdentityRef, который поступает из файла p12, используя SecPKCS12Import(). Как я могу восстановить SecIdentityRef без SecPKCS12Import(), но только файл сертификата, например crt или der?

+0

В итоге я создаю 'OpenSSL' для создания CSR-файла. Чтобы получить 'SecIdentityRef' без p12-файла, я заглядываю в [this] (http://stackoverflow.com/questions/4241590/how-to-establish-a-secidentityref-in-an-iphone-keychain-without-a- p12) – Yeung

ответ

8

Нет явной поддержки CSR в области безопасности в iOS. Однако создать CSR вручную не так сложно - это всего лишь блок данных ASN.1 DER, доступный во время работы iOS.

Вот псевдо код, что:

  1. Использование SecKeyGeneratePair() из рамок безопасности для создания свежих открытого/закрытого ключ
  2. Реализовать getPublicKeyBits метод для получения NSData-формы свежего открытого ключа (см https://developer.apple.com/library/ios/samplecode/CryptoExercise/Introduction/Intro.html)
  3. Внедрение getPrivateKey метод извлечения SecKeyRef из брелка
  4. Следуйте за http://www.ietf.org/rfc/rfc2986.txt, чтобы построить ASN.1 DER CSR в NSMutableData
  5. Использование CC_SHA1_ * для создания подписи хэш Certification Request Info (часть КСО)
  6. Использование SecKeyRawSign и секретного ключа подписи CSR

Это позволит создать надлежащую КСО (в виде NSData), которые могут быть отправлены к CA для утверждения.

Моя реализация доступна на GitHub: http://github.com/ateska/ios-csr.

+0

Мне очень интересно видеть этот класс, не нужно его полировать. Я попытался создать csr на iOS в течение 2 дней. – joakimb

+2

Вышел на GitHub: https://github.com/ateska/ios-csr –

+0

Большое вам спасибо! – joakimb

Смежные вопросы