4

对于需要推送通知的 iOS 应用程序,它必须首先请求用户允许这样做。之后,生成一个设备令牌,远程服务器可以通过这个令牌与用户进行通信。

我在这里读过一个类似的问题,但我觉得这还不够。下图是一个受信任的证书,它允许我查看此设备上发生的所有流量。

使用Fiddler2CertMaker,我可以嗅探 HTTPS 流量,这意味着客户端可能知道他们正在发送什么数据以及发送到哪里。

我的问题是,知道 SSL 不安全,无法保护我的客户看到我发送到远程服务器的内容,我是否应该简单地使用在我的应用程序中找到的密钥加密?

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

有人不能在我的应用程序中找到那个密钥吗?我也读了这个问题,似乎有可能取回密钥。

我的计划是这样的:

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

这可以防止人们随机输入标记,但是,secretkey_a0a0a0是字符串文字。很有可能在应用程序二进制文件本身中得到它。

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

我听说过加密,但这不只适用于资源文件吗?

我应该如何处理这个?

4

4 回答 4

3

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

于 2013-07-04T10:47:44.727 回答
3

如果您执行 SSL-Pinning(AFNetworking已实施),如果您没有服务器私钥,您将无法(在合理的时间范围内)嗅探客户端和服务器之间的 https 流量。

于 2013-07-05T19:16:42.003 回答
2

您可能需要查看Push Notifications Guide中的安全部分,特别是标题为“令牌生成和分发”的部分。

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

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

在这种情况下,加密设备令牌似乎是多余的。

于 2013-07-04T21:19:35.277 回答
0

为了防止有人使用令牌恶意向您的服务器发送垃圾邮件,我会在使用密钥时对令牌进行哈希处理,并将令牌和哈希发送到服务器。然后,您可以使用您的密钥在服务器上再次对令牌进行哈希处理,并检查请求是否有效。

于 2020-09-12T10:19:54.070 回答