web-dev-qa-db-de.com

Wie behebt man den TIC-SSL-Vertrauensfehler in iOS?

Wenn ich versuchte, mich mit einem Webservice bei der Anwendung anzumelden ..., stellte ich auch meinen plist-file wie folgt ein 

 enter image description here

Ich habe folgende Fehlermeldung erhalten: Diese Fehlermeldung wird auf meiner Konsole angezeigt

TIC SSL Trust Error [5:0x1c017fbc0]: 3:0
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
Task <E0C414FF-98C7-4E6B-876F-B9006465C8FD>.<1> HTTP load failed (error code: -1200 [3:-9802]
6
IKKA

Der folgende Code funktioniert für mich. Ich habe die Delegat-Methode für NSURLSessionDelegate (didReceiveChallenge) implementiert.

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:self delegateQueue:Nil];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error){
                    //Handle the response
   }];
[task resume];

// NSURLSessionDelegate-Methode

- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler{

  if([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]){
    if([challenge.protectionSpace.Host isEqualToString:@"yourdomain.com"]){
      NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
  completionHandler(NSURLSessionAuthChallengeUseCredential,credential);
}

} }

3
IKKA

Sie können dies in Appdelegate.m eingeben 

Hier ist der Code:

@implementation NSURLRequest(DataController)
   + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)Host{
   return YES;
}  
1
张轶铭

Antwort von IKKA in Swift 4.2

extension CustomViewController: URLSessionDelegate {
    func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
        if (challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodClientCertificate) {
            completionHandler(.rejectProtectionSpace, nil)
        }
        if (challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust) {
            let credential = URLCredential(trust: challenge.protectionSpace.serverTrust!)
            completionHandler(.useCredential, credential)
        }
    }
}
1

Swift 5.1

Ihre Klasse muss URLSessionDelegate erfüllen und die Funktion "didReceive Challenge" implementieren.

Diese Apple Entwicklerseiten veranschaulichen das Problem und bieten einen umfassenden Einblick, wie dieses Problem sicher behoben werden kann:

Bearbeitung einer Authentifizierungsaufforderung

Durchführen der manuellen Server-Vertrauensauthentifizierung

Hier ist ein Beispiel, wie dieses Problem für Entwicklungs- oder QA-Umgebungen behoben werden kann:

func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
    #if DEBUG
    if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
        if challenge.protectionSpace.Host == "YourTrustedDevOrQaDomain" {
            // At this point you can prevent a domain that is pretending to be a trusted domain by challenging the user to present some credentials or a security mechanism for authentication. 
            if let serverTrust = challenge.protectionSpace.serverTrust {
                let credential = URLCredential(trust: serverTrust)
                completionHandler(URLSession.AuthChallengeDisposition.useCredential, credential)
            }
        }
    }
    #endif
}
0
Ramin

Anleitungen von Apple-Entwicklerdokument.

sSL ändert iOS 11 https://forums.developer.Apple.com/thread/80197

Der Zertifikat-Viewer verfügt auch über spezifischere Nachrichten. In der Abbildung unten sehen Sie, dass eine Warnung für den jeweiligen Vertrauensfehler angezeigt wird. In diesem Fall lautet der Fehler "Dieses Zertifikat kann nicht überprüft werden (schwacher Digest-Algorithmus)", da es mit SHA-1 signiert ist.

In einigen Fällen ist es hilfreich, eine Verbindung zu einem Server herzustellen und ihn zu Testzwecken auszugeben. Für typische Internetprotokolle (HTTP, SMTP, NNTP usw.) können Sie dies mit dem Telnet-Tool tun. Dies funktioniert jedoch nicht, wenn das Protokoll TLS verwendet. In diesem Fall ist die beste Option der Unterbefehl s_client des Werkzeugs openssl. Listing 1 zeigt, wie Sie dieses Tool verwenden können, um den Inhalt manuell abzurufen (Denken Sie daran, dass HTTPS Port 443 verwendet).

Listing 1 mit openssl s_client

$ openssl s_client -connect www.Apple.com:443
CONNECTED(00000003)
[...]
GET / HTTP/1.1
Host: www.Apple.com

HTTP/1.1 200 OK
Server: Apache/2.2.3 (Oracle)
Content-Length: 9464
Content-Type: text/html; charset=UTF-8
ntCoent-Length: 9516
Cache-Control: max-age=47
Expires: Mon, 25 Jun 2012 16:18:24 GMT
Date: Mon, 25 Jun 2012 16:17:37 GMT
Connection: keep-alive

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
[...]
</html>
closed
$

Der s_client-Unterbefehl unterstützt eine Reihe nützlicher Debugging-Optionen. Zum Beispiel:

Sie können das Argument -cert angeben, damit es auf Clientzertifikatsanforderungen reagiert. Sie können die Option -showcerts angeben, um die vollständige Liste der vom Server bereitgestellten Zertifikate abzurufen. Die Optionen -debug und -msg ermöglichen low -level debugging features . Weitere Informationen zu diesen Optionen und mehr finden Sie in der Manpage.

0
BuLB JoBs