iPad之间的安全通信

时间:2017-01-21 06:33:25

标签: ios swift sockets ssl

在我的iOS应用程序中,我需要一种安全的方式让iPad相互通信。

我的第一个(不安全)实施是一台iPad会设置一个网络服务器而其他iPad会通过正常的NSURLSession请求与它通信。

现在Apple越来越严格使用HTTPS(通过App Transport Security),我想解决这个问题,并在iPad之间增加一层安全性。

我一直在研究GCDAsyncSocket中的TLS实现(已经在网络服务器上使用它)。但这引入了证书的问题,这很难:iPad应该能够在局域网中脱机工作,并且它们可以在IP地址上相互连接。

ATS强制证书由已知的CA颁发。我不能强迫我们的客户在他们的iPad上安装自定义CA证书。即使我能做到这一点,为这些iPad生成证书可能会成为一场噩梦。

所以我的下一个想法是用类似于TLS的层实现我自己的协议。但我当然更喜欢使用像TLS这样经过良好测试的机制。

我希望你们有一些好的建议。我觉得我不能成为第一个有这样一个案例的人,虽然很多人似乎都依赖远程服务器(我真的需要离线功能)。

我的最低iOS要求是iOS 9(兼容iPad 2)。

1 个答案:

答案 0 :(得分:0)

App Transport Security不适用于对IP地址建立的连接。来自iOS文档:

  

Availability of ATS for Remote and Local Connections

     

App Transport Security(ATS)仅适用于与公共主机名建立的连接。系统不对以下连接提供ATS保护:

     
      
  • 互联网协议(IP)地址
  •   
  • 不合格的主机名
  •   
  • 使用.local顶级域名(TLD)的本地主机
  •   
     

要连接到不合格的主机名或.local域,您必须将NSAllowsLocalNetworking密钥的值设置为YES

这在很大程度上是因为不可能以符合ATS要求的方式使用TLS。任何有能力的CA将拒绝为私有IP地址或主机名颁发证书,并且如果他们发现其密钥已被泄露(例如,通过在移动应用程序中分发),则将撤销证书。

关于编写自己的加密:不要。像您所描述的那样处理对等配置中的安全性很复杂。更重要的是,在应用程序中包含您自己的加密代码会使其在美国境外的分发更加复杂。您最好依靠无线网络的安全性来保护您的通信。