【发布时间】:2013-07-01 04:34:08
【问题描述】:
对于需要推送通知的 iOS 应用程序,它必须首先请求用户允许这样做。之后,生成一个设备令牌,远程服务器可以通过这个令牌与用户进行通信。
我读过一个类似的问题here,但我觉得这还不够。下图是受信任的证书,它允许我查看此设备上发生的所有流量。
使用Fiddler2 和CertMaker,我可以嗅探HTTPS 流量,这意味着客户端可能知道他们正在发送什么数据以及发送到哪里。
我的问题是,我知道 SSL 不安全,无法保护我的客户看到我发送到远程服务器的内容,我是否应该简单地使用在我的应用程序中找到的密钥加密?
如encrypt("device_token","secretkey_a0a0a0a")(假装这是Objective-C)?
难道不能有人在我的应用程序中找到该密钥吗?我也看了this的问题,好像可以找回秘钥了。
我的计划是这样的:
- 在 iOS 应用程序中,生成一个名为
activate的随机字符串。 - 用随机字符串和加密(不是散列)令牌,我只知道密钥。 (secretkey_a0a0a0)
- 将加密字符串与随机生成的字符串一起发送(活动)。
- 在服务器端,我检查是否可以使用
active和我的密钥解密有效令牌。 - 如果令牌有效,我会将令牌保存在我的数据库中。
这可以防止人们随机输入标记是的,但是,secretkey_a0a0a0 是一个字符串文字。很有可能在应用程序二进制文件本身中得到它。
我的问题是,我该如何保护这个密钥?答案也可以是,如何防止人们也向我的服务器发送无效令牌。
我听说过加密,但这不只适用于资源文件吗?
我应该如何处理这个问题?
【问题讨论】:
-
你太偏执了。 SSL 已经足够了。一旦应用程序脱离您的控制,它就可能被破坏。只需询问所有在 DRM 上花费数百万甚至数十亿美元的公司,就会发现它在数小时内就被破坏了。你真的认为你可以做得更好吗?
-
为什么要加密设备令牌?如果有人能读到,会有什么危害?
-
以便它可以在服务器端进行验证。我想防止人们发送假令牌。每当有人发送令牌时,它都会立即添加到我的数据库中。
-
@DaveChen:我明白了,谢谢!
标签: ios objective-c apple-push-notifications