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)
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
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é:
- https://github.com/AFNetworking/AFNetworking/issues/3999
- NSURLSession" HTTP load failed kCFStreamErrorDomainSSL, -9813 ; Auto certificat de signature
- https://forums.developer.apple.com/thread/79025
- https://forums.developer.apple.com/thread/14221
- iOS 9.3 : une erreur SSL s'est produite et une connexion sécurisée au serveur ne peut pas être faite
- iOS9 avoir d'erreur "une erreur ssl a eu lieu et d'une connexion sécurisée au serveur ne peut pas être faite"
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
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
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.