我正在开发没有身份验证的ios应用程序。现在我想保护我的服务器API免受我的ios应用程序以外的调用。一种可能的解决方案是让应用程序生成一个唯一的密钥(基于appname和签名),该密钥不存储在设备上,因为这是主要问题。我可以考虑一个应用程序逻辑,它可以提供一些保护并结合一些文件加密,但问题是存储了某些东西(例如,公钥可以存储在钥匙串中,但对于我的API黑客来说仍然不安全)。
有关我如何处理此事的任何提示/建议?
提前致谢
答案 0 :(得分:1)
简而言之,没有100%安全的方法来确保请求来自您的应用程序,如果该密钥可供iPhone使用,则可以从iPhone中提取。
您可以通过在应用程序中根据信息计算密钥运行时间并通过SSL进行通信来使其合理安全,但确定的攻击者也可以始终对密钥生成进行逆向工程。
答案 1 :(得分:0)
您要做的是使用经过相互身份验证的SSL,以便您的服务器只接受来自您应用的传入连接,而您的应用只会与您的服务器进行通信。
这是高级方法。创建自签名服务器SSL证书并在Web服务器上部署。您可以使用免费提供的工具,如keytool,我认为(但不确定)Apple包含iOS SDK的工具。然后创建一个自签名客户端,并将其作为资源部署在应用程序中包含的自定义密钥库中。将服务器配置为要求客户端SSL身份验证,并仅接受您生成的客户端证书。配置客户端使用该客户端证书来标识自己,并且只接受您在服务器上安装的那个服务器端证书。
如果您的应用以外的某人/某些人尝试连接到您的服务器,则不会创建SSL连接,因为服务器将拒绝未提供您的应用中包含的客户端证书的传入SSL连接。 / p>