it-swarm.com.de

SSL_ERROR_SSL (1): Operation in der Bibliothek fehlgeschlagen

Ich erhalte einige SSL Errors (die dazu führen, dass mein Projekt ohne Absturz stoppt/hängt, da ein DispatchGroup auf die Anforderung wartet), von denen ich nicht weiß, wie sie verursacht wurden, was sie sind oder was ich dagegen tun soll .

Ich habe zahlreiche Seiten ungefähr über dieses Problem gelesen, aber es gibt nicht viel Dokumentation oder Leute, die das gleiche Problem haben. Ich habe versucht die info.plist zu ändern aber das scheint nicht geholfen zu haben. Beide plist sehen folgendermaßen aus: (accounts.spotify.com ist die Domain für die URL der Zugriffstokenanforderung)

 enter image description here

Ich kann feststellen, dass mein Code fehlschlägt, wenn ich eine Anfrage an den Server stelle. (Dies ist in meinem Rahmen). Wie bereits erwähnt, wartet ein DispatchGroup auf diese Anforderung, aber der Code wird gestoppt.

self.currentToken = try self.spotifyRequest("https://accounts.spotify.com/api/token", method: .post, parameters: parameters)

Meine Anfragemethode:

private func spotifyRequest(_ url: URLConvertible, method: HTTPMethod, parameters: Parameters? = nil, headers: HTTPHeaders? = nil) throws -> JSONStandard {
    // Create a dispatch group to handle threads
    let group = DispatchGroup()
    group.enter()

    // Status of the request (starts as nil)
    var status: JSONStandard?


    DispatchQueue.global(qos: .userInitiated).async {
        Alamofire.request(url, method: method, parameters: parameters, headers: headers).responseJSON(completionHandler: { response in
            // Check if response is valid
            if let requestResponse = response.result.value as? JSONStandard {
                status = requestResponse
            } else {
                status = nil
            }

            // Let the next tasks be completed, it has finished waiting for the request
            group.leave()
        })
    }


    // Wait for a result
    group.wait()

    // Return value or throw an error
    if let safeStatus = status {
        return safeStatus
    } else {
        getAccessToken()
        throw SpotifyError.failedToCompleteRequest
    }
}

Ich bin mir nicht ganz sicher, was das Problem verursacht hat, da ich das Framework nur leicht bearbeitet und erneut archiviert habe.

Zuvor funktionierte es jedoch auf beiden (da ich dieses universelle Framework-Skript verwende)

Hier ist mein Absturzprotokoll (von dem ich nichts verstehe!):

2018-08-18 21: 36: 45.747984 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_errorlog (224) [C2.1: 2] [0x107d7c600] [boringssl_session_read] SSL_ERROR_SSL (1): Operation in der Bibliothek fehlgeschlagen

2018-08-18 21: 36: 45.748123 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print (205) [C2.1: 2] [0x107d7c600] 4427428040: Fehler: 100000d7: SSL-Routinen: OPENSSL_HANDL: SSL /Library/Caches/com.Apple.xbs/Sources/boringssl/boringssl-109.200.32/ssl/ssl_lib.cc:1081:

2018-08-18 21: 36: 45.748238 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_errorlog (224) [C2.1: 2] [0x107d7c600] [boringssl_session_read] SSL_ERROR_SSL (1): Operation in der Bibliothek fehlgeschlagen

2018-08-18 21: 36: 45.748432 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print (205) [C2.1: 2] [0x107d7c600] 4427428040: Fehler: 100000d7: SSL-Routinen: OPENSSL_HANDL: SSL /Library/Caches/com.Apple.xbs/Sources/boringssl/boringssl-109.200.32/ssl/ssl_lib.cc:1081:

2018-08-18 21: 36: 45.754554 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_errorlog (224) [C2.1: 2] [0x107d7c600] [boringssl_session_read] SSL_ERROR_SSL (1): Operation in der Bibliothek fehlgeschlagen

2018-08-18 21: 36: 45.754640 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print (205) [C2.1: 2] [0x107d7c600] 4427428040: Fehler: 100000d7: SSL-Routinen: OPENSSL_HANDL: SSL /Library/Caches/com.Apple.xbs/Sources/boringssl/boringssl-109.200.32/ssl/ssl_lib.cc:1081:

2018-08-18 21: 36: 45.754717 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_errorlog (224) [C2.1: 2] [0x107d7c600] [boringssl_session_read] SSL_ERROR_SSL (1): Operation in der Bibliothek fehlgeschlagen

2018-08-18 21: 36: 45.754796 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print (205) [C2.1: 2] [0x107d7c600] 4427428040: Fehler: 100000d7: SSL-Routinen: OPENSSL_HANDL: SSL /Library/Caches/com.Apple.xbs/Sources/boringssl/boringssl-109.200.32/ssl/ssl_lib.cc:1081:

2018-08-18 21: 38: 43.427156 + 0100 Songvote [4854: 1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames (1301) [C1.1: 2] [0x107e1b4c0] Ausgabe-Frames erhalten fehlgeschlagen, Status 8196

2018-08-18 21: 38: 43.427656 + 0100 Songvote [4854: 1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames (1301) [C1.1: 2] [0x107e1b4c0] Ausgabe-Frames erhalten fehlgeschlagen, Status 8196

2018-08-18 21: 38: 43.429723 + 0100 Songvote [4854: 1517503] TIC-Lesestatus [1: 0x0]: 1:57

2018-08-18 21: 38: 43.429976 + 0100 Songvote [4854: 1517503] TIC-Lesestatus [1: 0x0]: 1:57

2018-08-18 21: 38: 46.008365 + 0100 Songvote [4854: 1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames (1301) [C2.1: 2] [0x107d7c600] Ausgabe-Frames erhalten fehlgeschlagen, Status 8196

2018-08-18 21: 38: 46.008664 + 0100 Songvote [4854: 1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames (1301) [C2.1: 2] [0x107d7c600] Ausgabe-Frames erhalten fehlgeschlagen, Status 8196

2018-08-18 21: 38: 46.010037 + 0100 Songvote [4854: 1517503] TIC-Lesestatus [2: 0x0]: 1:57

2018-08-18 21: 38: 46.010215 + 0100 Songvote [4854: 1517503] TIC-Lesestatus [2: 0x0]: 1:57

 enter image description here

Dies ist alles für eine Spotify-Anfrage über Alamofire, die zuvor funktioniert hat und jetzt auf mysteriöse Weise nicht funktioniert. Es funktioniert nicht auf meinem GerätODERdem Simulator.

Ist dies ein Problem im Zusammenhang mit sicheren Internetverbindungen? Oder ist das ein anderes Problem?

Einige Links zu dem, was ich mir angesehen habe:

Bearbeitungen:

Ist dies ein Problem auf den Servern von Spotify? Oder ein Fehler in Xcode 10? Ich habe meine Framework-Dateien .Swift in mein Projekt verschoben und erhalte weiterhin die Protokolle.

Ich bekomme auch diese fehler vor meiner anfrage seltsam ????.

Dies ist ein Handshake-Fehler, den ich jedoch nicht konfiguriere:

Der SSL-Handshake wird eingeleitet, wenn Ihr Browser eine Anforderung für eine sichere Verbindung zu einem Webserver ausgibt. Der Server sendet einen öffentlichen Schlüssel an Ihren Computer, und Ihr Computer überprüft das Zertifikat anhand einer bekannten Liste von Zertifizierungsstellen. ... Testen Sie Ihre SSL-Funktionalität, indem Sie den Handshake absichtlich fehlschlagen lassen.

Ich habe sogar versucht, eine frühere Version zu überprüfen, um alle Änderungen rückgängig zu machen (was in früheren Versionen definitiv völlig in Ordnung war), indem ich git verwendete, was keinen Einfluss darauf hatte.


Bearbeiten: Die temporäre Lösung:

Es sieht so aus, als würde iOS 12 mit diesen Netzwerkanforderungen nicht mehr funktionieren. Ich habe vor 2 Tagen einen Fehlerbericht an Apple gesendet. Hoffentlich wird dieser bald behoben. Also, was habe ich getan?

Im Moment ist mein iPhone 7 unbrauchbar, da ich auf iOS 12 Beta bin. Die einzige Möglichkeit ist, mein Projekt auf dem Simulator auszuführen. Um dies zu tun (als ob Sie sich in Xcode 10 Beta befinden, da die Simulatoren iOS 12 sind), gehen Sie zu Xcode -> Preferences -> Components -> iOS 11.4 Simulator und laden Sie es dann herunter. Wenn Sie nun einen Simulator auswählen, wählen Sie diejenigen aus, die iOS 11.4 sagen.

  • Dieser Teil ist nicht mehr wahr.

Was verursacht das?

Obwohl dieser Fehler keine Auswirkungen haben sollte, wird er verursacht, wenn Sie Ihr Projekt unter iOS 12 ausführen. Soweit ich weiß, handelt es sich hierbei NICHT um ein Sicherheitsproblem. Das Problem, dass mein Code nicht ausgeführt wurde, wurde jedoch durch einen Deadlock verursacht, anstatt durch diesen Fehler.

Update: Was Apple gegen meinen Fehlerbericht getan hat

Nun, obwohl ich keine Nachricht oder etwas von Apple erhalten habe, wird der Bericht als "Duplikat" markiert, wie jemand anderes dies vor mir gemeldet hat. Wenn ich Informationen darüber bekomme, wann sie behoben werden, werde ich sie hier aktualisieren.


Wenn Sie Fragen, Tipps oder Hinweise haben, lassen Sie es mich wissen! Danke im Voraus!

40
George_E

Sackgasse

Ich gehe davon aus, dass spotifyRequest im Hauptthread aufgerufen wird.

Wenn also der Haupt-Thread die Zeile erreicht

group.wait()

und diese Zeile von responseJSON completionHandler wurde noch nicht aufgerufen:

group.leave()

dann wird der Haupt-Thread durch den Aufruf von group.wait () oben blockiert. Aufgrund des blockierten Haupt-Threads kann group.leave () nicht aufgerufen werden. Klassischer Deadlock.

Verfication

Festlegen eines Haltepunkts für die Linie

if let safeStatus = status {

zeigt, dass diese Zeile nie aufgerufen wird.

Minimal Beispiel, das ausgeführt wird

Als Ausgangspunkt hier der Code für ein minimales Beispiel, das ein Ergebnis liefert.

import UIKit
import Alamofire

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.contactSpotify {
            print ("result: \(String(describing: $0)) error: \(String(describing: $1))")
        }
    }

    func contactSpotify(completion: @escaping ([String: Any]?, Error?) -> Void) {
        let url = URL(string: "https://accounts.spotify.com/api/token")!
        Alamofire.request(url,
                          method: .post,
                          parameters: ["grant_type": "refresh_token",
                                       "client_id": "<someClientId>",
                                       "refresh_token": "<someRefreshToken>",
                                       "client_secret": "<someClientSecret>"])
            .validate()
            .responseJSON { response in
                guard response.result.isSuccess else {
                    completion(nil, response.result.error)
                    return
                }

                completion(response.result.value as? [String: Any], nil)
        }
    }

}

Dies gibt als Ausgabe in der Konsole:

result: Optional(["access_token": XXX, "scope": user-read-email user-read-private, "token_type": Bearer, "expires_in": 3600]) error: nil

siehe Screenshot:  console output

ATS-Einstellungen in info.plist

Spotify bietet auf ihrem Server eine gültige TLS-Zertifikatskette an. In info.plist sind also keine ATS-Einstellungen erforderlich. 

SSL-Warnungen in der Konsole

Ich bekomme die gleichen SSL-Warnungen in der Konsole, wenn ich die Anwendung auf einem iOS 12-Simulator wie Ihnen ausführen. Trotzdem ist die Verbindung hergestellt und die Anfrage liefert Daten. Vielleicht ist dies in einer der nächsten Betas verschwunden. 

13

Ich hatte die gleiche Warnung mit Codegen-Swagger im Emulator bei jedem Antwortanruf. Aber alles hat funktioniert. Diese Warnung ist nur verschwunden, wenn ich die Umgebungsvariable hinzugefügt habe Seltsame unerwünschte Xcode-Protokolle ausblenden

0
Zhebzhik Babich