SSL_ERROR_SSL (1): сбой в работе библиотеки
Я получаю некоторые SSL Error
(которые заставляют мой проект останавливаться/зависать без сбоев, поскольку у меня есть DispatchGroup
ожидающая запроса), который я не знаю, как они вызваны, что это такое или что делать Это.
Я читал многочисленные страницы примерно по этой проблеме, но документации или людей, имеющих такую же проблему, мало. Я попытался изменить info.plist, но, похоже, это не помогло. Оба plist
выглядят следующим образом: (accounts.spotify.com
- это домен для URL-адреса запроса токена доступа)
Я вижу, что мой код не работает, когда я делаю запрос на сервер. (Это в моих рамках). Как упоминалось ранее, у меня есть 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
Это все для запроса 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
см. скриншот:
Настройки ATS в info.plist
Spotify предлагает действительную цепочку сертификатов TLS на своем сервере. Таким образом, нет необходимости в настройках ATS в info.plist.
Предупреждения SSL в консоли
Я получаю те же предупреждения SSL в консоли, когда запускаю приложение на симуляторе iOS 12, как вы. Тем не менее соединение установлено и запрос доставляет данные. Возможно, это пропало в одной из следующих бета-версий.
Ответ 2
У меня было то же самое предупреждение с codegen Swagger в эмуляторе при любом ответном вызове. Но все сработало. Это предупреждение исчезло только тогда, когда я добавил переменную окружения Скрыть странные нежелательные журналы XCode