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:

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!

https://src-bin.com


Answer #1

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

ver captura de pantalla:

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.





boringssl