13

我们是在 WCF 服务上标准化的 .Net 商店。我们正在开发一个 iPhone 应用程序,该应用程序需要进行安全的 Web 服务调用以获取应用程序的数据。为确保安全通信,我们在 Web 服务器上启用了 SSL。但这并不能确保该服务只能由授权的应用程序使用。我们已将我们的服务配置为支持 x509 证书身份验证。甚至可以从 iPhone 应用程序调用具有证书身份验证的安全 WCF 服务吗?

我花了很多时间在互联网上搜索示例,但无济于事。我已经能够成功调用不安全的 WCF 服务而没有任何问题。我还对 WS-Security 和 WS-Trust 通信标准进行了大量研究。我相信我理解这应该如何工作。我只是无法将 iPhone 框架中的步骤/对象拼凑在一起,我需要完成这项工作。

任何关于该主题的想法和想法将不胜感激。

此外,对以下任何一项的任何想法:

  1. 如何最好地使用 iPhone 应用程序部署 P12 证书文件
  2. 如何最好地保护应用程序中 P12 文件的密码
  3. 使用应用程序部署 P12 文件是最佳实践吗
  4. iPhone 框架内是否有支持这种安全通信的设施?如果不是,那将是什么替代建议。
4

5 回答 5

10

对于初学者,我想说,如果您真的很重视安全性,请投入适当的时间和资源,并将其视为您功能列表中的一等公民。不要只是“打开 SSL”并假装事情是安全的。我并不是建议您这样做或不这样做,但我只是觉得我必须在继续之前说出来。

也就是说,您可能已经知道 WS-* 全部构建在 http 请求之上,并且任何时候您处理大量 http 请求时,您可能会发现ASIHTTPRequest在 iPhone 上非常有用。但是,这不会让你 100% 到达那里。

从 iPhone 的角度来看,您有:

  1. URL加载系统,它是处理任何类型网络资源的高级API
  2. CFNetwork C API 较低级别,允许您以任何您认为合适的方式更好地控制加密流和网络流量
  3. 完成繁重工作的证书、密钥和信任服务,更具体地说是 X509 信任策略

在 Mac 上,您可以使用 Secure Transport,但据我所知,他们尚未将其移植到设备上,因此除非您打算将其带到桌面或刚刚进入,否则我不会因为阅读而分心学习一切的心情:)

如果您正在使用 WCF 进行任何安全操作,您可能意识到的第一件事是您可以使用许多选项,但这一切都归结为以下简短列表:

  1. 带有明文消息的传输层安全性 (https) (xml/json/...)
  2. 开放传输 (http) 上的消息层安全性(加密的消息正文)
  3. 通过安全传输的安全消息

我上次做 WCF 时(大约一年前),微软的一般建议似乎是开放传输上的消息层安全性,因为在尝试保护传输时引入了防火墙/可访问性问题。但是,这种方法假定所有相关方都具备 .NET/WCF 能力。我相信如果它是 HTTPS 传输级别的安全性,具有清晰的 XML 或 JSON 消息正文,那么在设备上使用会更容易。这样,您就可以利用 Apple 已经完成的 CFNetwork 和 NSHTTPRequest 中的所有内容。

一旦你得到一些工作,你会想要参考企业部署指南,特别是关于无线注册的文档,以便你可以在设备上安装证书。请记住,一切皆有可能,不要害怕使用该程序附带的 Apple 支持票之一 :)

编辑:

我完全忘记提及GenericKeychainCryptoExcercise示例

编辑2:

在我无缘无故地被否决后,我重新阅读了我的回复,并意识到我在没有真正回答你关于如何在设备上打开 p12 文件的问题时有点啰嗦。您应该能够简单地[[UIApplication sharedApplication] openURL:urlToP12FileEitherLocalOrRemote]]将其启动到操作系统以进行安装过程。

于 2010-06-22T14:25:20.773 回答
3

您还可以在消息级别使用 ssl + 用户/通过身份验证。

于 2010-02-20T12:08:50.707 回答
1

一般来说,如果你想在 iPhone 上安装证书,我找到了两个选项(都来自这里):

  • 将证书通过电子邮件发送给收件人。如果它是一个有效的证书并且电子邮件中的标题是有序的,那么它将允许电子邮件的收件人安装证书。这里的问题当然是中间人攻击。

  • 使用 iPhone 企业配置实用程序。

这应该会让你成为其中的一部分(在本地安装证书)。我应该注意,一般来说,您不想为整个应用程序安装一个证书,而是为您的用户提供单独的证书。作为一般做法,对应用程序进行身份验证是一件非常糟糕的事情,而您应该对用户进行身份验证

但是,如果您已经在对用户进行身份验证,那么这应该不是问题,因为通过 HTTPS 使用基本身份验证也可以正常工作(并且更容易编码)。

于 2010-02-15T21:25:09.990 回答
0

iPhone 应该能够访问受证书保护的 WCF 应用程序。如果您将 WCF 服务设置为 Azure ACS 的 RP,则它应该可以使用 OAuth 以及其他方法。

查看此处的示例以获取更多信息: http: //acs.codeplex.com/

于 2011-04-14T04:45:47.650 回答
0

我也同意 Yaron Naveh 的解决方案,可能最好的选择是使用 SSL。我相信 SSL/TLS 加密在性能方面也比 WCF 中基于消息/XML 的加密更好。

我认为证书可能需要来自受信任的 CA(证书颁发机构)才能正常工作。从记忆中,我在使用带有自签名证书的 iPhone SDK 时遇到了困难,但这在去年可能已经改变了......

于 2010-03-10T17:58:16.667 回答