ios - SSL_ERROR_SSL(1): error en la operación dentro de la biblioteca
swift alamofire (1)
Recibo algunos SSL Error
(que están causando que mi proyecto se detenga / cuelgue sin bloqueo ya que tengo un DispatchGroup
esperando la solicitud), que no sé cómo se producen, qué son o qué debo hacer. acerca de eso
He leído numerosas páginas aproximadamente sobre este problema, pero no hay mucha documentación o personas que tengan el mismo problema. He intentado cambiar la lista de información pero eso no parece haber ayudado. El plist
ambos plist
es el siguiente: ( accounts.spotify.com
es el dominio para la URL de la solicitud del token de acceso)
Puedo ver que mi código está fallando cuando hago una solicitud al servidor. (Esto está en mi marco). Como se mencionó anteriormente, tengo un DispatchGroup
esperando esta solicitud pero el código se detiene.
self.currentToken = try self.spotifyRequest("https://accounts.spotify.com/api/token", method: .post, parameters: parameters)
Mi método de solicitud:
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
}
}
No estoy exactamente seguro de qué fue lo que causó el problema, porque todo lo que hice fue editar y archivar el marco ligeramente.
Sin embargo, anteriormente funcionó en ambos (ya que estoy usando este script de marco universal )
Aquí está mi registro de fallos (¡del cual no puedo entender nada!):
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_SSLL (1): una falla dentro de la estructura
2018-08-18 21: 36: 45.748123 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print (205) [C2.1: 2]: Parques centrales de la piscina en el maletero de la piscina. /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_SSLL (1): una falla en el interior
2018-08-18 21: 36: 45.748432 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print (205) [C2.1: 2inascampo de la pileta de la pileta de la pileta de la pileta de la pileta de la pileta de la pileta en el que se encuentra el maletero de los animales de compañía]. /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_SSLL (1): una falla dentro de la estructura interna.
2018-08-18 21: 36: 45.754640 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print (205) [C2.1: 2inascampo de la pileta de la pileta de la pileta). /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_SSLL (1): un fallo dentro de un mismo
2018-08-18 21: 36: 45.754796 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print (205) [C2 Estado de la luz en el interior de la casa] [0x107d7c600] 4427428040: error: 100000d7: Cacceso de la luz en el interior de la casa: 5251080: error: 100000d7 /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] obtuvimos cuadros de salida fallidos, estado 8196
2018-08-18 21: 38: 43.427656 + 0100 Songvote [4854: 1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames (1301) [C1.1: 2] [0x107e1b4c0] se han producido fallos en los cuadros, estado 8196
2018-08-18 21: 38: 43.429723 + 0100 Songvote [4854: 1517503] Estado de lectura de TIC [1: 0x0]: 1:57
2018-08-18 21: 38: 43.429976 + 0100 Songvote [4854: 1517503] Estado de lectura de TIC [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] fallan los marcos de salida, estado 8196
2018-08-18 21: 38: 46.008664 + 0100 Songvote [4854: 1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames (1301) [C2.1: 2] [0x107d7c600] obtuvimos cuadros de salida fallidos, estado 8196
2018-08-18 21: 38: 46.010037 + 0100 Songvote [4854: 1517503] Estado de lectura de TIC [2: 0x0]: 1:57
2018-08-18 21: 38: 46.010215 + 0100 Songvote [4854: 1517503] Estado de lectura de TIC [2: 0x0]: 1:57
Todo esto es para una solicitud de Spotify
través de Alamofire
que anteriormente funcionaba y ahora misteriosamente no funciona. No funciona en mi dispositivo O el simulador.
¿Es este un problema relacionado con las conexiones seguras de internet? ¿O es este otro problema?
Algunos enlaces a lo que he visto:
- https://github.com/AFNetworking/AFNetworking/issues/3999
- NSURLSession "la carga HTTP falló kCFStreamErrorDomainSSL, -9813; certificado de autofirmación
- https://forums.developer.apple.com/thread/79025
- https://forums.developer.apple.com/thread/14221
- iOS 9.3: se ha producido un error de SSL y no se puede establecer una conexión segura con el servidor
- iOS9 recibe el error "se ha producido un error de SSL y no se puede establecer una conexión segura con el servidor"
Ediciones:
¿Es esto un problema en los servidores de Spotify? ¿O un error en Xcode 10? .swift
mis archivos .swift
marco a mi proyecto, y aún obtengo los registros.
También recibo estos errores antes de mi pedido, extraño 🤔.
Esto es lo que es un error de protocolo de enlace, pero no hago ninguna configuración de esto:
El protocolo de enlace SSL se inicia cuando su navegador emite una solicitud de conexión segura a un servidor web. El servidor envía una clave pública a su computadora, y su computadora verifica el certificado contra una lista conocida de autoridades de certificación. ... Pruebe su funcionalidad SSL haciendo que el handshake falle intencionalmente.
Incluso traté de verificar una versión anterior para revertir todos los cambios (que definitivamente funcionó completamente bien en versiones anteriores) usando git
, que no tuvo ningún efecto en esto.
Edición: La solución temporal:
Parece que iOS 12 ya no funciona con estas solicitudes de red. Envié un informe de error a Apple hace 2 días, así que espero que lo solucionen pronto. ¿Entonces qué hice?
Bueno, por ahora, mi iPhone 7 es inútil ya que estoy en iOS 12 beta. Entonces, la única opción por ahora es ejecutar mi proyecto en el simulador. Para hacerlo (como si estuviera en Xcode 10 beta porque los simuladores son iOS 12), vaya a Xcode -> Preferences -> Components -> iOS 11.4 Simulator
y luego descárguelo. Ahora, cuando selecciona un simulador, seleccione los que dicen iOS 11.4
.
- Esta parte ya no es cierta.
¿Qué causa esto?
Aunque este error no debería afectar a nada, se debe a que ejecuta su proyecto en iOS 12. Por lo que yo sé, este NO es un problema de seguridad. Sin embargo, mi problema de no ejecutar mi código fue causado por un punto muerto en lugar de lo que pensé que era debido a este error.
Actualización: lo que Apple ha hecho con mi informe de errores
Bueno, aunque no recibí un mensaje ni nada de Apple, el informe está marcado como "duplicado", ya que alguien más lo había informado antes que yo. Si obtengo información sobre cuándo se solucionará, la actualizaré aquí.
Si tiene alguna pregunta, consejo o sugerencia, ¡hágamelo saber! ¡Gracias por adelantado!
Punto muerto
Asumo que se llamará spotifyRequest en el hilo principal.
Así que si el hilo principal llega a la línea
group.wait()
y esta línea de respuestaJSON completedHandler aún no fue llamada:
group.leave()
entonces el hilo principal se bloquea debido a la llamada de group.wait () anterior. Debido a que el hilo principal bloqueado group.leave () no puede ser llamado. Punto muerto clásico.
Verficacion
Establecer un punto de interrupción a la línea.
if let safeStatus = status {
muestra que esta línea nunca se llama.
Ejemplo mínimo que se está ejecutando
Como punto de partida aquí, el código para un ejemplo mínimo que ofrece un resultado.
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)
}
}
}
Esto da como salida en la consola:
result: Optional(["access_token": XXX, "scope": user-read-email user-read-private, "token_type": Bearer, "expires_in": 3600]) error: nil
Configuraciones ATS en info.plist
Spotify ofrece una cadena de certificados TLS válida en su servidor. Por lo tanto, no hay necesidad de configuraciones ATS en info.plist.
Advertencias de SSL en la consola
Obtengo las mismas advertencias de SSL en la consola cuando ejecuto la aplicación en un simulador de iOS 12 como usted. No obstante, la conexión está establecida y la solicitud entrega datos. Tal vez esto se haya ido en una de las siguientes betas.