SSL_ERROR_SSL (1): сбой в работе библиотеки

Я получаю некоторые SSL Error (которые заставляют мой проект останавливаться/зависать без сбоев, поскольку у меня есть DispatchGroup ожидающая запроса), который я не знаю, как они вызваны, что это такое или что делать Это.

Я читал многочисленные страницы примерно по этой проблеме, но документации или людей, имеющих такую же проблему, мало. Я попытался изменить info.plist, но, похоже, это не помогло. Оба plist выглядят следующим образом: (accounts.spotify.com - это домен для URL-адреса запроса токена доступа)

enter image description here

Я вижу, что мой код не работает, когда я делаю запрос на сервер. (Это в моих рамках). Как упоминалось ранее, у меня есть DispatchGroup ожидающая этого запроса, но код останавливается.

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

Мой метод запроса:

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

Я не совсем уверен, что вызвало эту проблему, потому что все, что я делал, было слегка отредактировано и снова архивировать структуру.

Однако раньше он работал на обоих (поскольку я использую этот универсальный сценарий рамки)

Вот мой журнал сбоев (который я не могу понять ни одного!):

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): сбой в работе библиотеки

2018-08-18 21: 36: 45.748123 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print (205) [C2.1: 2] [0x107d7c600] 4427428040: ошибка: 100000d7: Подпрограммы SSL: 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): сбой в работе библиотеки

2018-08-18 21: 36: 45.748432 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print (205) [C2.1: 2] [0x107d7c600] 4427428040: ошибка: 100000d7: Подпрограммы SSL: 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): сбой в работе библиотеки

2018-08-18 21: 36: 45.754640 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print (205) [C2.1: 2] [0x107d7c600] 4427428040: ошибка: 100000d7: процедуры SSL: 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): сбой в работе библиотеки

2018-08-18 21: 36: 45.754796 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print (205) [C2.1: 2] [0x107d7c600] 4427428040: ошибка: 100000d7: процедуры SSL: 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] не удалось получить выходные кадры, состояние 8196

2018-08-18 21: 38: 43.427656 + 0100 Songvote [4854: 1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames (1301) [C1.1: 2] [0x107e1b4c0] не удалось получить выходные кадры, состояние 8196

2018-08-18 21: 38: 43.429723 + 0100 Songvote [4854: 1517503] Статус чтения TIC [1: 0x0]: 1:57

2018-08-18 21: 38: 43.429976 + 0100 Songvote [4854: 1517503] Статус чтения 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] не удалось получить выходные кадры, состояние 8196

2018-08-18 21: 38: 46.008664 + 0100 Songvote [4854: 1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames (1301) [C2.1: 2] [0x107d7c600] не удалось получить выходные кадры, состояние 8196

2018-08-18 21: 38: 46.010037 + 0100 Songvote [4854: 1517503] Статус чтения TIC [2: 0x0]: 1:57

2018-08-18 21: 38: 46.010215 + 0100 Songvote [4854: 1517503] Статус чтения TIC [2: 0x0]: 1:57

enter image description here

Это все для запроса Spotify через Alamofire который ранее работал и теперь таинственно не делает. Это не работает на моем устройстве или симуляторе.

Это проблема, связанная с безопасными подключениями к Интернету? Или это еще одна проблема?

Некоторые ссылки на то, что я посмотрел:

Редактирование:

Это проблема на серверах Spotify? Или ошибка в Xcode 10? Я перевел мои файлы .swift в свой проект и все еще получаю журналы.

Я также получаю эти ошибки перед моим запросом, странно 🤔.

Это ошибка рукопожатия, но я не делаю никаких настроек:

Подтверждение SSL инициируется, когда ваш браузер выдает запрос на безопасный запрос на веб-сервер. Сервер отправляет открытый ключ на ваш компьютер, и ваш компьютер проверяет сертификат на известный список органов сертификации.... Протестируйте свои функции SSL, преднамеренно нарушив квитирование.

Я даже попробовал проверку на более ранней версии, чтобы отменить все изменения (которые в старых версиях, безусловно, отлично работали) с использованием git, которые не повлияли на это.


Изменение: временное решение:

Похоже, что iOS 12 больше не работает с этими сетевыми запросами. Я отправил отчет об ошибке в Apple 2 дня назад, поэтому, надеюсь, скоро это исправит. Так что же я сделал?

Ну, на данный момент, мой iPhone 7 бесполезен, поскольку я на бета-версии iOS 12. Итак, единственный вариант - запустить мой проект на симуляторе. Для этого (как если бы вы были в Xcode 10 beta, потому что имитаторы - iOS 12), перейдите в Xcode → Preferences → Components → iOS 11.4 Simulator и затем загрузите его. Теперь, когда вы выбираете симулятор, выберите те, которые говорят iOS 11.4.

  • Эта часть больше не верна.

Что вызывает это?

Хотя эта ошибка не должна ничего влиять, она возникает при запуске вашего проекта в iOS 12. Насколько я знаю, это НЕ проблема безопасности. Однако моя проблема с запуском моего кода была вызвана тупиком, а не тем, что, как я думал, было из-за этой ошибки.

Обновление: что Apple сделала о моем отчете об ошибке

Ну, хотя я ничего не получил от Apple, отчет отмечен как "дубликат", как кто-то сообщил об этом передо мной. Если я получу информацию о том, когда она будет исправлена, я обновлю ее здесь.


Если у вас есть какие-либо вопросы, советы или указатели, пожалуйста, дайте мне знать! Заранее спасибо!

Ответы

Ответ 1

тупик

Я предполагаю, что spotifyRequest будет вызываться в основном потоке.

Так что, если основной поток достигает линии

group.wait()

и эта строка ответа JSON завершениеHandler еще не был вызван:

group.leave()

тогда основной поток блокируется из-за вызова group.wait() выше. Из-за заблокированного основного потока group.leave() не может быть вызван. Классический тупик.

Verfication

Установка точки останова на линию

if let safeStatus = status {

показывает, что эта строка никогда не называется.

Минимальный пример, который работает

В качестве отправной точки здесь приведен код для минимального примера, который дает результат.

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

}

Это дает как вывод в консоли:

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

см. скриншот: console output

Настройки ATS в info.plist

Spotify предлагает действительную цепочку сертификатов TLS на своем сервере. Таким образом, нет необходимости в настройках ATS в info.plist.

Предупреждения SSL в консоли

Я получаю те же предупреждения SSL в консоли, когда запускаю приложение на симуляторе iOS 12, как вы. Тем не менее соединение установлено и запрос доставляет данные. Возможно, это пропало в одной из следующих бета-версий.

Ответ 2

У меня было то же самое предупреждение с codegen Swagger в эмуляторе при любом ответном вызове. Но все сработало. Это предупреждение исчезло только тогда, когда я добавил переменную окружения Скрыть странные нежелательные журналы XCode