SSL_ERROR_SSL(1):库中的操作失败

时间:2018-08-18 20:44:39

标签: ios swift alamofire spotify boringssl

我收到一些SSL Error(它们使我的项目停止/挂起,没有崩溃,因为我有一个DispatchGroup在等待请求),我不知道它们的状态如何原因,原因或解决方法。

我已经阅读了许多有关该问题的页面,大约大约,但是没有太多文档或遇到相同问题的人。我已经尝试过changing the 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
    }
}

我不确定是什么原因引起的,因为我所做的只是稍微重新编辑并归档了框架。

但是,早先它对这两者都有效(因为我正在使用this universal framework script

这是我的崩溃日志(我听不懂!):

  

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_FAIL :/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_FAIL :/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_FAIL :/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_FAIL :/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.0​​08365 + 0100 Songvote [4854:1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301)[C2.1:2] [0x107d7c600]获取输出帧失败,状态8196

     

2018-08-18 21:38:46.0​​08664 + 0100 Songvote [4854:1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301)[C2.1:2] [0x107d7c600]获取输出帧失败,状态8196

     

2018-08-18 21:38:46.0​​10037 + 0100 Songvote [4854:1517503] TIC读取状态[2:0x0]:1:57

     

2018-08-18 21:38:46.0​​10215 + 0100 Songvote [4854:1517503] TIC读取状态[2:0x0]:1:57

enter image description here

这全部是针对通过Spotify发出的Alamofire请求,该请求以前有效,但现在神秘地无效。它不能在我的设备 OR 模拟器上工作。

这是与安全的互联网连接有关的问题吗?还是这是另一个问题?

一些链接到我所查看的内容:

编辑:

这是Spotify服务器上的问题吗?还是Xcode 10中的错误?我将框架.swift文件移到了我的项目中,但仍然获得了日志。

在我提出请求之前,我也收到了这些错误,很奇怪。

这是握手错误,但是我对此不做任何配置:

  

当浏览器向Web服务器发出安全连接请求时,将启动SSL握手。服务器将公用密钥发送到您的计算机,并且您的计算机根据已知的证书颁发机构列表检查证书。 ...通过故意导致握手失败来测试SSL功能。

我什至尝试使用git对较早版本进行签出以撤消所有更改(在较早版本中绝对可以正常工作),对此没有任何影响。


编辑:临时解决方案:

似乎iOS 12不再适用于这些网络请求。我两天前向Apple发送了一个错误报告,希望他们能尽快解决。那我该怎么办?

好吧,就目前而言,我的iPhone 7就像在iOS 12 beta上一样没用。因此,目前唯一的选择是在模拟器上运行我的项目。为此(由于模拟器为iOS 12,因此您好像在Xcode 10 beta中一样),请转到Xcode -> Preferences -> Components -> iOS 11.4 Simulator,然后下载它。现在,当您选择模拟器时,请选择显示iOS 11.4的模拟器。

  • 这部分不再适用。

这是什么原因造成的?

尽管此错误不应影响任何事情,但它是在iOS 12中运行项目时引起的。据我所知,这不是安全问题。但是,我的代码无法运行的问题是由死锁引起的,而不是我认为的是因为此错误。

更新:Apple对我的错误报告做了什么

好吧,尽管我没有收到Apple的消息或任何东西,但该报告被标记为“重复”,因为其他人在我之前已经报告过此消息。如果我获得有关何时修复的任何信息,请在此处进行更新。


如果您有任何疑问,技​​巧或指示,请告诉我!预先感谢!

2 个答案:

答案 0 :(得分:14)

死锁

我假设SpotifyRequest将在主线程上调用。

因此,如果主线程到达该行

group.wait()

并且还没有调用以下响应JSON完成处理程序

group.leave()

然后由于上述group.wait()的调用,主线程被阻塞。 由于主线程被阻塞,因此无法调用leave()。古典僵局。

验证

在行上设置断点

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

info.plist中的

ATS设置

Spotify在其服务器上提供有效的TLS证书链。因此,无需在info.plist中进行ATS设置。

控制台中的SSL警告

当我像您一样在iOS 12模拟器上运行应用程序时,在控制台中也会收到相同的SSL警告。尽管如此,连接已建立并且请求传递数据。也许在下一个Beta版中,它就消失了。

答案 1 :(得分:0)

在任何响应调用上,我都在模拟器中对Codegen Swagger发出了相同的警告。但是所有的工作。仅当我添加环境变量Hide strange unwanted Xcode logs

时,此警告才会消失