Разрешить соединение для неверного закрепления SSL на AFNetwroking - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь реализовать ssl-пиннинг в нашем приложении для iOS.

Определение, заявленное нашим архитектором безопасности, состояло в том, чтобы реализовать его в 2 этапа:
- 1-й этап - отправка события аналитикикаждый раз, когда мы распознаем, что происходит неправильное закрепление (если завершение не удалось, я должен отправить событие, но разрешить запрос продолжить)
- 2-й этап - фактически блокировать каждый вызов, который не прошел успешно закрепление.

У нас есть 2 сетевых слоя в приложении, один из которых использует Alamofire, другой использует AFNetworking.Я успешно реализовал фазу 1 в сетевом слое на основе Alamofire.Моя проблема связана с AFNetworking:

AFNetworking блокирует любой вызов, который не удается закрепить, после установки политики.К сожалению, я хотел бы разрешить эти вызовы.

Я попытался установить для свойства allowInvalidCertificates политики значение YES, что позволило всем тем, кто не смог закрепиться, продолжить работу по мере необходимости, но я не уверен, как это можно сделать.Я получаю уведомление о том, что определенное закрепление не удалось (для отправки события)

Любая помощь будет принята с благодарностью.

ОБНОВЛЕНИЕ

ИтакЯ понял, что могу установить блок, который будет вызываться при каждом вызове, используя:

- (void)setSessionDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block {

и / или

- (void)setTaskDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block {

Это позволяет мне сделать проверки на вызов, и на 1-м этапе я мог отправить событие и вернуть NSURLSessionAuthChallengePerformDefaultHandling, что именно то, что мне нужно.По какой-то причине блок task не вызывается независимо от того, что я делаю, в то время как блок session имеет значение.

1 Ответ

0 голосов
/ 23 октября 2018

Итак, я понимаю, что могу установить блок для вызова при каждом вызове, используя:

- (void)setSessionDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block {

и / или

- (void)setTaskDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block {

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

...