9

我正在编写一个 iPhone 应用程序,当用户与之交互时,它需要向服务器发送少量信息(每次两个字符串,每个字符串的长度低于 128 个字符,而且这种情况不会太频繁)。我希望这些信息保持机密,所以我认为某种加密或安全连接是必要的。

我的问题是关于服务器端的事情。iPhone 应用程序必须与之通信的服务器是用 django 编写的,并且在 lighttpd 上运行。这样做的最合适的方式(或标准方式)是什么。我在想 https,我知道在 iPhone 上我可以使用 ASIHTTPRequest 来执行 POST 请求,但我不知道它在服务器端需要什么。我需要证书吗?数据如何加密/保护?是否有任何 django 模块可以帮助解决这个问题?我必须做些什么来配置 lighttpd 吗?

像 xml-rpc 或 json-rpc 这样的东西会更简单吗?是否有可能确保这样的通信?这会发生在什么水平上?

任何帮助将非常感激。

4

3 回答 3

4

使用 xml-rpc 或 json-rpc 只是将数据封装成易于传输的形式的手段。您的 iPhone 应用程序可以使用其中一种格式转换 Objective C 数据,而您的 Django 服务器应用程序可以将数据转换回 Python 对象。

这些都与安全无关

创建 HTTPS (SSL) 连接会加密客户端 (iPhone) 和服务器 (Django) 之间的所有通信。您将需要获得服务器端的证书。这向客户端表明服务器就是它声称的身份。您在这条道路上的下一个研究方向应该是关于如何配置 lighttpd 来处理 SSL 流量。一旦 lighttpd 协商 SSL 通信,您的 Django 应用程序将像处理非安全流量一样运行。

这是您最好的选择。

如果出于某种原因不想使用 SSL,那么您可以为通信的两端找到强大的加密库。iPhone 应用程序可以加密数据,通过 HTTP 连接发送它,而 Django 应用程序可以解密它。例如,pycrypto Python 库实现了强加密密码,例如AESBlowfish。您也许可以找到用 Objective C 编写的其中一种密码的实现。

您是否注意到这变得越来越复杂?

使用 SSL。这是为基于 HTTP 的通信完成安全性的方式。

于 2009-10-19T21:18:42.093 回答
1

嗯,看起来这可能是你所追求的,你看到了吗?

为 Lighttpd/Django 设置 SSL

如果我没看错,那么该设置允许您的服务器响应 https 和 http 请求(?)然后,如果您的整个应用程序不会是 https,那么这个SSL 中间件可以帮助将一些路径配置为 ssl,而另一些则不是。

于 2009-10-13T05:50:49.470 回答
1

如果您在服务器端使用 https (SSL),则使用 XML-RPC 或 JSON-RPC 无关紧要。您传输的所有数据都将被加密和安全。

我只能从我们的 Rails 应用程序和 nginx 说话。我从 GoDaddy 购买了 SSL 证书(非常便宜),并且 nginx 设置为在发送内容时动态加密内容(Rails 本身不这样做)。在 iPhone 上 ASIHTTPRequest 将负责解密数据。所有其他层不应该关心加密,你可以发送任何你想要的东西。

您也许还可以使用自签名证书。我们决定使用 GoDaddy,因为我们也将 SSL 证书用于常规浏览器,如果他们遇到自签名证书,则会向用户显示警告消息,这显然会吓跑人们。

于 2009-10-16T09:48:30.920 回答