安全发送设备令牌给APNs
对于需要推送通知的iOS应用程序,它必须首先请求用户许可。 之后,生成设备令牌,由此,远程服务器可以通过该令牌与用户通信。
我在这里读了一个类似的问题,我觉得这不够。 下面的图片是一个可信的证书,它允许我查看在这个设备上发生的所有stream量。
使用Fiddler2以及CertMaker ,我可以嗅探HTTPSstream量,这意味着客户端可能知道他们正在发送的数据以及到哪里。
我的问题是,知道SSL不安全,无法保护我的客户看到我发送给远程服务器,我应该简单地用我的应用程序中find的密钥encryption?
比如encrypt("device_token","secretkey_a0a0a0a")
(假装这是Objective-C)?
难道有人不能在我的应用程序中find这个键吗? 我也读过这个问题,似乎有可能找回密钥。
我的计划是这样的:
- 在iOS应用程序中,生成一个名为
activate
的随机string。 - encryption(而不是散列),令牌由随机string和一个我只知道的密钥组成。 (secretkey_a0a0a0)
- 将encryption的string与生成的随机生成的string(活动)一起发送。
- 在服务器端,我检查是否可以使用
active
密钥和我的密钥解密一个有效的令牌。 - 如果该标记有效,我会将标记保存在我的数据库中。
这可以防止人们随意input令牌yes,但是, secretkey_a0a0a0
是一个string文字。 这很有可能在应用程序二进制文件中得到它。
我的问题是,我如何保护这个密钥? 答案也可以是,如何防止人们向我的服务器发送无效令牌。
我听说过encryption,但是这不只适用于资源文件?
我应该如何处理这个?
如果你使用SSL-Pinning( AFNetworking
已经实现了这个function),如果你没有服务器私钥,你将无法(在合理的时间内)嗅探客户端和服务器之间的httpsstream量。
如果你担心中间的人可以窃取你的令牌,并发送假的推送通知给你的应用程序的用户,确保这个不能发生。 由于对苹果apn服务器的请求必须使用pem文件进行签名,所以主要关心的应该是如何保证证书文件的安全,而不是apn令牌。 如果你想防止在你的数据库中写入无效标记,那么你应该实现一些CRC或奇数/偶数位机制。
您可能需要检查推送通知指南中的安全部分,特别是标题为“令牌生成和扩散”的部分 。
设备令牌由通过苹果APNS连接的设备生成。 我的猜测(他们没有在文档中说)是它是唯一的给定的应用程序标识符。
然后,APNS可能会将这些标识符与您用来与之通信的证书证书进行匹配,从而validation推送通知实际上是源自您的应用的。
在这种情况下,encryption设备令牌似乎过分。