2016-08-02 6 views
0

Ich bekomme (kCFStreamErrorDomainSSL, -9813) bei der Verbindung mit einem Client-Server.iOS - (kCFStreamErrorDomainSSL, -9813)

Der Server des Clients verfügt über ein selbstsigniertes Zertifikat, das ich nicht ändern kann. Die App verwendet AFNetworking 3.x. Ich habe folgendes versucht, aber nichts scheint zu funktionieren.

Wenn jemand mir helfen könnte, wird es sehr geschätzt.

Info.plist:

<key>NSAppTransportSecurity</key> 
    <dict> 
     <key>NSAllowsArbitraryLoads</key> 
     <true/> 
     <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
     <true/> 

     <key>NSExceptionDomains</key> 
     <dict> 
      <key> *** CLIENT HOSTNAME *** </key> 
      <dict> 
       <key>NSIncludesSubdomains</key> 
       <true/> 
       <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
       <true/> 
       <key>NSTemporaryExceptionMinimumTLSVersion</key> 
       <string>TLSv1.0</string> 
       <key>NSTemporaryExceptionRequiresForwardSecrecy</key> 
       <false/> 
      </dict> 
     </dict> 

    </dict> 

AFNetworking Verbindungsmanager:

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 

#ifdef USE_SELF_SIGNED_CERT_RULES 
    manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; 
    manager.securityPolicy.allowInvalidCertificates = YES; 
    manager.securityPolicy.validatesDomainName = YES; 
#endif 

Antwort

0

hatte ich das gleiche Problem. Ich habe deine Lösung versucht, aber es hat nicht funktioniert. Einstellungen allowInvalidCertificates, validatesDomainName und AFSSLPinningModeCertificate hat mein Problem nicht gelöst. Nachdem ich viele Googles durchgegangen bin, sah ich die Struktur AFSecurityPolicy dieser Klasse.

Es gibt eine Funktion in dieser Klasse

- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust 
       forDomain:(nullable NSString *)domain; 

Sie haben den AFSecurityPolicy Unterklasse und JA in seiner Umsetzung zurück. Dann können Sie sich mit Ihrem Server verbinden.

Mein Client-Server wurde auch selbst signiert.

Einstellungen Eigenschaften auf AFSecurityPolicy löst nicht das Problem, ich frage mich warum.

+0

Vielen Dank Muhammad, es funktionierte wie ein Zauber. Ich habe getan, was du gesagt hast, ich habe evaluateServerTrust subclassiert und dann bei Bedarf in setSessionDidReceiveAuthenticationChallengeBlock aufgerufen. – PerroVerde

Verwandte Themen