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

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

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

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

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

解决方法:

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

事实上,Apple建议:

Note: Although ATS is unenforced for connection to local hosts, Apple strongly recommends using Transport Layer Security (TLS) for any
local connection, along with the use of a self-signed certificate to
validate the local IP address.

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

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

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...