2014-01-21 8 views
3

Я работаю над приложением iOS, которое будет использоваться предприятиями. Наше приложение будет разговаривать с сервером, который может быть настроен с самозаверяющим сертификатом, созданным компанией, которая развернула наше серверное программное обеспечение.Как я могу позволить пользователю доверять и подписывать самоподписанный SSL-сертификат, используя AFNetworking в iOS

Наше приложение iOS использует AFNetworking, что позволяет использовать SSL-шифрование. Но создается впечатление, что это только связывает сертификаты SSL, которые были включены как часть пакета приложений, когда он был создан. Это не позволяет вам работать с сертификатом, о котором устройство iOS узнает позже.

Я ищу способ для клиента выталкивать (возможно, через профиль) самозаверяющий сертификат, чтобы наше приложение могло безопасно разговаривать с сервером. Есть ли способ? Или мне нужно пропустить AFNetworking и напрямую использовать классы Foundation.

Я приветствую любые комментарии, чтобы помочь прояснить этот вопрос.

ОБНОВЛЕНИЕ: Для других, которые, возможно, были смущены, как и я. Хотя я понимаю, что это важная тема, я сбила с толку ее первый приоритет: удаление поддержки недействительных сертификатов из нашего прототипа. Я хотел, чтобы пользователь явно доверял самоподписанному сертификату. Это просто. Просто добавьте его в качестве профиля на устройство iOS. Но я также был спокоен с тем фактом, что самоподписанные сертификаты, которые мы использовали в разработке, были не совсем правы, поэтому iOS не доверяла им. См. http://blog.httpwatch.com/2013/12/12/five-tips-for-using-self-signed-ssl-certificates-with-ios/ о том, как создать «хороший» самозаверяющий сертификат. Теперь, когда мне доверяют самоподписанные сертификаты, я буду следить за тем, как использовать пиннинг.

+0

Вы используете AFNetworking 1 или 2? –

+0

Я использую версию 2. –

ответ

1

Вы правы, AFSecurityPolicy имеет свойство pinnedCertificates, которое по умолчанию использует любой сертификат в комплекте приложений, если вы используете фабричный метод policyWithPinningMode:.

Чтобы использовать собственные сертификаты, установите это свойство на NSArray, содержащий NSData представления каждого сертификата пользователя:

AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; 
NSData *certificateData = [NSData dataWithContentsOfFile... 
securityPolicy.pinnedCertificates = @[ certificateData ]; 
+0

Спасибо Дэвиду за ваш ответ. Мы проверим это. –

+0

Не беспокойтесь, дайте мне знать, как вы поживаете –

+0

Может быть, неделя или две, прежде чем мы доберемся до этого. Я собираюсь отметить ваш ответ как правильный. (Документация, безусловно, поддерживает вас. Я просто пропустил это в своем обзоре документации. Или я смотрел более старую версию документов.) –