Erreur SSL SSL (1): opération échouée dans la bibliothèque

j'obtiens des SSL Error s (qui sont à l'origine de mon projet d'arrêter/de blocage avec pas de plantage que j'ai un DispatchGroup attente de la demande), je ne sais pas comment ils sont causés, ce qu'ils sont, ou ce qu'il faut faire à ce sujet.

j'ai lu de nombreuses pages à peu près à propos de ce problème, mais il n'y a pas beaucoup de documentation ou de personnes ayant le même problème. J'ai essayé changer l'info.plist mais que ne semble pas l'avoir aidé. Les deux plist ressemblent à ceci: ( accounts.spotify.com est le domaine pour L'URL de la demande de token d'accès)

enter image description here

je peux voir que mon code est défaillant lorsque je fais une requête au serveur. (C'est dans mon cadre). Comme mentionné plus haut, j'ai un DispatchGroup qui attend cette requête mais le code s'arrête.

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

ma demande méthode:

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
    }
}

Je ne sais pas exactement ce qui a causé le problème, parce que tout ce que j'ai fait était légèrement modifier et archiver le cadre à nouveau.

cependant, plus tôt, il a travaillé sur les deux (comme je l'utilise ce script cadre universel )

Voici mon journal de bord (que je ne comprends pas!):

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): opération échouée dans la bibliothèque

2018-08-18 21:36:45.748123+0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print(205) [C2.1:2][0x107d7c600] 4427428040: erreur: 100000d7: SSL routines:OPENSSL_internal:SSL_HANDSHAKE_FAILURE:/BuildRoot/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): opération échouée dans la bibliothèque

2018-08-18 21:36:45.748432+0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print(205) [C2.1:2][0x107d7c600] 4427428040: erreur: 100000d7: SSL routines:OPENSSL_internal:SSL_HANDSHAKE_FAILURE:/BuildRoot/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): opération échouée dans la bibliothèque

2018-08-18 21:36:45.754640+0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print (205) [C2.1:2][0x107d7c600] 4427428040: erreur: 100000d7: SSL routines:OPENSSL_internal:SSL_HANDSHAKE_FAILURE:/BuildRoot/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): opération échouée dans la bibliothèque

2018-08-18 21:36:45.754796+0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print(205) [C2.1:2][0x107d7c600] 4427428040: erreur: 100000d7: SSL routines:OPENSSL_internal:SSL_HANDSHAKE_FAILURE:/BuildRoot/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] get les cadres de sortie ont échoué, état 8196

2018-08-18 21:38:43.427656+0100 Songvote [4854:1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C1.1:2][0x107e1b4c0] get output frames failed, state 8196

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

2018-08-18 21:38:43.429976+0100 Songvote [4854:1517503] TIC Read Status [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] get output frames failed, state 8196

2018-08-18 21:38:46.008664+0100 Songvote [4854:1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C2.1:2][0x107d7c600] get output frames failed, state 8196

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

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

enter image description here

C'est tout pour une demande Spotify à travers Alamofire qui auparavant fonctionnait et maintenant mystérieusement ne fonctionne pas. Il ne fonctionne pas sur mon dispositif ou le simulateur.

est-ce un problème lié aux connexions internet sécurisées? Ou est-ce un autre problème?

quelques liens vers ce que j'ai regardé:

modifications:

est-ce un problème sur les serveurs de Spotify? Ou un bug dans Xcode 10? J'ai déplacé mon framework .swift dossiers à mon projet, et toujours obtenir les journaux.

j'obtiens aussi ces erreurs avant ma demande, étrange

22
demandé sur George_E_2 2018-08-18 23:44:38

1 réponses

Blocage

je suppose que spotifyRequest sera appelé sur le thread principal.

donc si le fil principal atteint la ligne

group.wait()

et cette ligne de répondant completehandler n'a pas encore été appelé:

group.leave()

puis le thread principal est bloqué en raison de l'appel du groupe.wait() ci-dessus. En raison du groupe de thread principal bloqué.quitter() ne peut pas être appelé. Classique impasse.

verification

Configuration d'un point d'arrêt à la ligne

if let safeStatus = status {

montre que cette ligne n'est jamais appelée.

exemple Minimal qui s'exécute

comme point de départ ici le code pour un exemple minimal qui délivre un résultat.

import UIKit
import Alamofire

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.contactSpotify {
            print ("result: \(String(describing: "151930920")) error: \(String(describing: ))")
        }
    }

    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)
        }
    }

}

donne comme sortie dans la console:

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

voir la capture D'écran: console output

ATS Paramètres dans l'info.plist

Spotify offre une chaîne de certificats TLS valide sur son serveur. Il n'est donc pas nécessaire de définir les paramètres ATS dans info.plist.

Avertissements SSL dans la Console

j'obtiens les mêmes avertissements SSL dans la console quand j'exécute l'application sur un simulateur iOS 12 comme toi. Néanmoins la connexion est établie et la demande fournit des données. C'est peut-être parti dans une des prochaines bêtas.

3
répondu Stephan Schlecht 2018-08-21 20:11:45