iOS应用和Raspberry Pi之间的安全通信

时间:2018-04-23 14:16:45

标签: ios linux ssl app-transport-security

我想在本地环境中创建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之间进行安全通信?

1 个答案:

答案 0 :(得分:2)

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

事实上,它是由Apple推荐的:

  

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

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

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