iPhone Web服务使用证书身份验证调用WCF服务

时间:2010-02-11 13:43:00

标签: iphone wcf authentication certificate x509

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

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

对此主题的任何想法和想法将不胜感激。

此外,对以下任何内容的任何想法:

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

5 个答案:

答案 0 :(得分:10)

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

也就是说,您可能已经知道WS- *都是建立在http请求之上的,并且每当您执行大量的http请求时,您可能会发现ASIHTTPRequest对iPhone非常有帮助。但是,这不会让你100%的方式。

从iPhone的角度来看,你有:

  1. URL loading system,它是用于处理任何类型网络资源的高级API
  2. 较低级别的CFNetwork C API,可让您以任何您认为合适的方式对加密流和网络流量进行更多控制
  3. 执行繁重工作的Certificate, Key, and Trust Services,更具体地说是the X509 trust policies
  4. 在Mac上,您可以使用安全传输,但据我所知,他们没有将其移植到设备上,因此除非您计划将其带到桌面,否则我不会太过分心。只是在学习一切的心情:)

    如果你正在使用WCF做任何安全性,你可能首先意识到有many options available to you,但这一切都归结为这个简短的列表:

    1. 传输层安全性(https),带有明文消息(xml / json /...)
    2. 通过打开的传输(http)
    3. 的邮件层安全性(加密邮件正文)
    4. 通过安全传输的安全邮件
    5. 上次我在做WCF(大约一年前)时,由于在尝试保护传输时引入了防火墙/可访问性问题,Microsoft的一般建议似乎是开放传输上的消息层安全性。但是,这种方法假设所涉及的所有各方都支持.NET / WCF。我相信如果它是HTTPS传输级安全性,使用清晰的XML或JSON消息体,在设备上使用会更容易。这样你就可以充分利用Apple所做的CFNetwork和NSHTTPRequest所带来的所有东西。

      一旦您开始工作,您将需要参考Enterprise Deployment Guide,特别是有关无线注册的文档,以便您可以在设备上安装证书。请记住,任何事情都是可能的,并且不要害怕使用该程序附带的Apple支持票之一:)

      编辑:

      我完全忘记提及GenericKeychainCryptoExcercise示例

      编辑2:

      在我没有明显理由的情况下被投票后,我重新阅读了我的回复并意识到我有点过分,而没有真正回答你关于如何在设备上打开p12文件的问题。您应该能够简单地[[UIApplication sharedApplication] openURL:urlToP12FileEitherLocalOrRemote]]并将其发送到操作系统以进行安装。

答案 1 :(得分:3)

您还可以在消息级别使用ssl + user / pass身份验证。

答案 2 :(得分:1)

通常,如果您想在iPhone上安装证书,我找到了两个选项(两者都来自here):

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

  • 使用iPhone enterpirse配置。

这应该让你成为那里的一部分(在本地安装证书)。我应该注意,通常,您不希望为整个应用程序安装一个证书,但为您的用户提供单独的证书。作为一般做法,验证应用程序非常糟糕的事情,而您应该验证用户

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

答案 3 :(得分:0)

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

我认为证书可能需要来自受信任的CA(证书颁发机构)才能实现。从内存来看,我在使用带有自签名证书的iPhone SDK时遇到了困难,但去年可能会有所改变......

答案 4 :(得分:0)

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

请查看此处的示例了解更多信息:http://acs.codeplex.com/