安全发送设备令牌给APNs

对于需要推送通知的iOS应用程序,它必须首先请求用户许可。 之后,生成设备令牌,由此,远程服务器可以通过该令牌与用户通信。

我在这里读了一个类似的问题,我觉得这不够。 下面的图片是一个可信的证书,它允许我查看在这个设备上发生的所有stream量。

使用Fiddler2以及CertMaker ,我可以嗅探HTTPSstream量,这意味着客户端可能知道他们正在发送的数据以及到哪里。

我的问题是,知道SSL不安全,无法保护我的客户看到我发送给远程服务器,我应该简单地用我的应用程序中find的密钥encryption?

比如encrypt("device_token","secretkey_a0a0a0a") (假装这是Objective-C)?

难道有人不能在我的应用程序中find这个键吗? 我也读过这个问题,似乎有可能找回密钥。

我的计划是这样的:

  1. 在iOS应用程序中,生成一个名为activate的随机string。
  2. encryption(而不是散列),令牌由随机string一个我只知道的密钥组成。 (secretkey_a0a0a0)
  3. 将encryption的string与生成的随机生成的string(活动)一起发送。
  4. 在服务器端,我检查是否可以使用active密钥和我的密钥解密一个有效的令牌。
  5. 如果该标记有效,我会将标记保存在我的数据库中。

这可以防止人们随意input令牌yes,但是, secretkey_a0a0a0是一个string文字。 这很有可能在应用程序二进制文件中得到它。

我的问题是,我如何保护这个密钥? 答案也可以是,如何防止人们向我的服务器发送无效令牌。

我听说过encryption,但是这不只适用于资源文件?

我应该如何处理这个?

如果你使用SSL-Pinning( AFNetworking已经实现了这个function),如果你没有服务器私钥,你将无法(在合理的时间内)嗅探客户端和服务器之间的httpsstream量。

如果你担心中间的人可以窃取你的令牌,并发送假的推送通知给你的应用程序的用户,确保这个不能发生。 由于对苹果apn服务器的请求必须使用pem文件进行签名,所以主要关心的应该是如何保证证书文件的安全,而不是apn令牌。 如果你想防止在你的数据库中写入无效标记,那么你应该实现一些CRC或奇数/偶数位机制。

您可能需要检查推送通知指南中的安全部分,特别是标题为“令牌生成和扩散”的部分

设备令牌由通过苹果APNS连接的设备生成。 我的猜测(他们没有在文档中说)是它是唯一的给定的应用程序标识符。

然后,APNS可能会将这些标识符与您用来与之通信的证书证书进行匹配,从而validation推送通知实际上是源自您的应用的。

在这种情况下,encryption设备令牌似乎过分。