2017-01-10 2 views
0

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

class Session { 
static let sharedInstance = Session() 

private var manager : SessionManager? 

func ApiManager()->SessionManager{ 
    if let m = self.manager{ 
     return m 
    }else{ 

     let serverTrustPolicies: [String: ServerTrustPolicy] = [ 
      "https:api-cat.example.com": .pinPublicKeys(
       publicKeys:savePublicKeys(), 
       validateCertificateChain:true, 
       validateHost:true 
      )] 
     self.manager = SessionManager(
      serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)) 
     return self.manager! 
    } 
}} 

где savePublicKeys возвращается [SecKey].

Даже после установки нового ServerTrustPolicy с пустым массивом открытых ключей, я все еще могу совершать успешные вызовы и получать данные. Любые идеи, если я ошибаюсь здесь?

ответ

1

Ваш "https:api-cat.payeezy.com" выглядит рыбный.

Либо удалите https: -part или добавьте недостающую двойную косую черту https://. ServerTrustPolicyManager применяет политику только в том случае, если ее свойство хоста соответствует хосту запроса, если они не совпадают, используется стандартное поведение Apple (см. Alamofire Documentation).

+0

Это решило мою проблему. Спасибо ChaosCoder. Просто хотелось добавить это, но проблема была в том, что «//» отсутствует после «https:». Вы можете изменить свой ответ, чтобы отразить то же самое. – SagarU