使用 alamofire 通过 iOS 应用程序连接 Windows SSL 服务器

Posted

技术标签:

【中文标题】使用 alamofire 通过 iOS 应用程序连接 Windows SSL 服务器【英文标题】:connect with Windows SSL server through iOS app using alamofire 【发布时间】:2019-02-14 20:01:56 【问题描述】:

在我的服务器中,我实现了 SSL 证书,并通过我的 android 应用程序使用改造连接,只需传递 URL 和参数。 现在我正在开发应用程序的 ios 版本,使用 Alamofire 连接相同的 API,但出现 SSL 错误。

[BoringSSL] 函数boringssl_session_errorlog:第2866行[boringssl_session_handshake_continue] SSL_ERROR_SSL(1):库内操作失败 [BoringSSL] 函数boringssl_session_handshake_error_print:第2805行boringssl ctx 0x7fcff052b0d0:140531107629232:错误:100000f0:SSL 例程:OPENSSL_internal:UNSUPPORTED_PROTOCOL:/BuildRoot/Library/Caches/com.apple.xbs/Sources/boringssl_Sim/握手客户端.c:970: [BoringSSL] 函数boringssl_context_get_os_status:第4304行SSL_AD_PROTOCOL_VERSION

TIC TCP 连接失败 [1:0x6000001708c0]: 3:-9802 Err(-9802) NSURLSession/NSURLConnection HTTP 加载失败 (kCFStreamErrorDomainSSL, -9802) 任务 . HTTP 加载失败(错误代码:-1200 [3:-9802])

我在 swift 4 中连接服务器的代码

Alamofire.request("https://url/token", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: [:]).responseJSON response in 如果 response.result.isSuccess 打印(“成功”) 别的 打印(“错误(字符串(描述:result.result.error))”)

为了将 iOS 与网络连接,是否需要做任何额外的事情。 我已经解决了各种用户已经发布的各种问题,但对我没有任何帮助。

【问题讨论】:

【参考方案1】:

似乎是 iOS 中的 ATS 不接受的服务器配置问题。 iOS 客户端无法创建与服务器的握手。要检查有效性,请转到https://www.ssllabs.com。添加您的服务器(例如 www.google.com)并运行测试。服务器测试完成后,请检查以下字段。

如果这个没有显示在图片中(绿色而不是红色),那么应用程序无法连接到服务器。您必须使用正确的 ATS 配置来配置服务器。此链接提供了有关它的更多详细信息。 https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

附上相关部分截图。

主要功能是前向保密、TLS 1.2、所需的对称密码和所需的服务器证书。希望这是您正在寻找的。如果是的话,请告诉我。 :)

注意:检查问题是否正确的一种快速方法是在 iOS 7 模拟器中运行应用程序。它应该可以连接并且不会发生错误,因为 iOS 7 没有 ATS。

【讨论】:

禁用 ATS,即使我在 .plist 文件中使用了 NSAllowsArbitraryLoads 但没有用。 将您的请求设为 http:// 而不是 https://,然后 NSAllowsArbitraryLoads 将起作用。否则不会。干杯。 我只需要使用https不能使用http。【参考方案2】:

iOS 9.0 或更高版本已内置对默认启用的 ATS 的支持。 Alamofire 与 https// 一起使用,但为此需要在 info.plist 中通过添加 NSAllowsArbitraryLoads=YES 来定义 NSAllowsArbitraryLoads

但不建议禁用 ATS。

【讨论】:

以上是关于使用 alamofire 通过 iOS 应用程序连接 Windows SSL 服务器的主要内容,如果未能解决你的问题,请参考以下文章

MySQL之不得不说的keepsync和trysync

无法通过 Facebook iOS SDK 连接到 Facebook

我是否可以通过socket.io和JavaScript将Unity程序连接到node.js服务器,如果可以,怎么办?

蓝牙连接到 iOS 和 android

从 iOS 应用程序中列出(并连接到)蓝牙设备

通过socket.io连接到节点服务器的phonegap应用程序在浏览器上工作,但在应用程序中不工作