【问题标题】:Secure communication between iOS app and Raspberry PiiOS 应用程序和 Raspberry Pi 之间的安全通信
【发布时间】:2018-10-03 15:16:54
【问题描述】:

我想在本地环境中创建我的 RPI 和 iOS 11 移动应用程序之间的安全通信通道。我的 RPI 正在运行 python API 代码,而我的 iOS 移动应用程序创建了对 RPI 的不同 API 调用。为了安全连接,我使用由我的私人证书颁发机构签名的证书。所有证书和签名请求都是使用“OpenSSL”Linux 命令行工具创建的。

正如我之前提到的,设备在本地网络中通过默认的 .local 域进行通信,该域由 linux 设备上的 avahi 服务和 iOS 设备上的 bonjour (zeroconf) 服务配置。一开始我在移动应用程序中加载证书时遇到了一些问题,经过一些研究后,我发现我必须在 xCode 中启用“NSAllowsLocalNetworking”标志IDE。启用“NS”标志后,SSL 证书固定成功并建立了安全通信。

我不知道但我想知道的是两件事:

  1. 启用“NSAllowsLocalNetworking”标志后,Apple 方面是否对将应用程序发布到应用商店有任何限制?
  2. 除了使用证书之外,在 iOS 移动应用程序和 RPI 之间的安全通信方面,我还有哪些其他选择?

【问题讨论】:

  • Apple 启用NSAllowsLocalNetworking 应该没有任何问题,因为大多数家庭自动化设备使用本地网络来链接/连接和配置设备。示例是 Amazon Alexa 应用、nest 等

标签: ios linux ssl app-transport-security


【解决方案1】:

您正在使用正确的方法。使用带有证书固定的自签名证书是正确的方法,只要您保护了用于生成证书的密钥,您就可以信任连接。

其实是苹果推荐的:

注意:虽然 ATS 未强制用于连接到本地主机,但 Apple 强烈建议对任何连接使用传输层安全 (TLS) 本地连接,以及使用自签名证书 验证本地 IP 地址。

Apple 专门为此类场景创建了NSAllowsLocalNetworking。在当前的 Apple 文档中,使用此标志不会触发需要向 Apple 提供禁用 ATS 的理由。另外需要注意的是,此标志仅在 iOS10 及更高版本 上受支持。

如果您需要支持旧版本,Apple 提供了一种方法来支持旧版本。基本上,您将NSAllowsArbitraryLoads 标志和NSAllowsLocalNetworking 标志都设置为true。基本上,iOS9 只能理解,所以 iOS 9 设备完全禁用 ATS。 iOS 10+ 可以理解NSAllowsArbitraryLoadsNSAllowsLocalNetworking,因此它内置了逻辑让NSAllowsLocalNetworking 覆盖NSAllowsArbitraryLoads,并为应用程序的其余部分保留ATS 保护,同时允许本地网络连接通过. Apple 在其 documentation page 标题“支持旧操作系统”下对此进行了介绍。

【讨论】:

    猜你喜欢
    • 2013-11-21
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多