2016-05-10 41 views
2

Hat jemand einen Weg gesehen, um mit Alamofire mit dem Fingerabdruck anstelle des öffentlichen Schlüssels festzunageln?SSL Pinning mit Fingerabdruck in Alamofire

Tut mir leid, wenn dies beantwortet wurde, habe ich es nirgends gesehen.

Dank

Antwort

2

Diese endete ziemlich geradlinig zu sein. Der unten stehende Code ist möglicherweise nicht perfekt, mein echter Code führt einige zusätzliche Prüfungen durch, aber das ist das meiste davon.

Der .SHA1Fingerprint ist eine Erweiterungsmethode auf SecCertificate, die es in NSData kopiert und dann in einen SHA1 konvertiert. Ich benutze RNCryptor, um das zu tun, aber Sie können es aber tun.

Der isValidFingerprint vergleicht nur das Ergebnis mit jedem meiner bekannten Fingerabdrücke.

Das hängt alles von meinem statischen Alamofire.Manager.

manager.delegate.sessionDidReceiveChallenge = { session, challenge in 
     var disposition: NSURLSessionAuthChallengeDisposition = .PerformDefaultHandling 
     var credential: NSURLCredential? 

     if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { 
      let host = challenge.protectionSpace.host 

      if let serverTrust = challenge.protectionSpace.serverTrust { 

       let serverTrustPolicy = ServerTrustPolicy.PerformDefaultEvaluation(validateHost: true) 

       if serverTrustPolicy.evaluateServerTrust(serverTrust, isValidForHost: host) { 
        disposition = .UseCredential 
        credential = NSURLCredential(forTrust: serverTrust) 
       } else { 
        disposition = .CancelAuthenticationChallenge 
        return (disposition, credential) 
       } 

       for index in 0..<SecTrustGetCertificateCount(serverTrust) { 
        if let certificate = SecTrustGetCertificateAtIndex(serverTrust, index) { 
         if let fingerPrint = certificate.SHA1Fingerprint { 
          if isValidFingerprint(fingerPrint) { 
           return (disposition, credential) 
          } 
         } 
        } 
       } 
      } 
     } 
     disposition = .CancelAuthenticationChallenge 
     return (disposition, credential) 
    } 
0

Darf ich fragen, warum Sie versuchen, anstelle des öffentlichen Schlüssels oder das Zertifikat des Fingerabdrucks an Pin?

Meiner Erfahrung nach besteht der Schlüsselpunkt des Fixierens darin, etwas in Ihr Programm zu schreiben.

FYI: https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning

+0

Edit: Ich hatte andere Worte, aber gerade den Link gelesen, den Sie gesendet haben. Unter dem Hashing-Abschnitt spricht dieser Artikel tatsächlich über die Vorteile des Fixierens mit dem Fingerabdruck anstelle des öffentlichen Schlüssels. Ich schätze die Hilfe und den Link, es war ein guter Artikel, dem ich noch nicht begegnet bin. – Bob

+0

@Bob Oh, ich verstehe. Danke für das Teilen :) – NINJAJA