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

Mai*_*ke9 13 iphone authentication wcf certificate x509

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

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

任何有关该主题的想法和想法将不胜感激.

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

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

slf*_*slf 10

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

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

从iPhone的角度来看,你有:

  1. 网址加载系统,这是一个高层次的API来处理任何类型的网络资源
  2. CFNetwork的 C API是低级别并允许您加密数据流和网络流量的更大量的控制,你认为合适的方式
  3. 执行繁重工作的证书,密钥和信任服务,更具体地说是X509信任策略

在Mac上你可以使用安全传输,但据我所知他们没有将它移植到设备上所以除非你打算把它带到桌面或者只是在学习一切的心情:)

如果您正在使用WCF进行任何安全性,您可能首先意识到有很多选项可供您使用,但这一切都归结为这个简短的列表:

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

我最后一次做WCF(大约一年前),由于在尝试保护传输时引入了防火墙/可访问性问题,Microsoft的一般建议似乎是开放传输上的消息层安全性.但是,这种方法假设所涉及的所有各方都支持.NET/WCF.我相信如果它是HTTPS传输级安全性,使用清晰的XML或JSON消息体,在设备上使用会更容易.这样你就可以充分利用苹果公司所做的CFNetwork和NSHTTPRequest所带来的所有东西.

一旦您开始工作,您将需要参考企业部署指南,特别是有关无线注册的文档,以便您可以在设备上安装证书.请记住,一切皆有可能,并且不要害怕使用该程序附带的Apple支持票之一:)

编辑:

我完全忘了提到GenericKeychainCryptoExcercise的例子

编辑2:

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


cas*_*One 1

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

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

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

这应该可以帮助您完成部分工作(在本地安装证书)。我应该指出,一般来说,您不想为整个应用程序安装一个证书,而是为您的用户提供单独的证书。作为一般实践,对应用程序进行身份验证是一件非常糟糕的事情,而您应该对用户进行身份验证

但是,如果您已经对用户进行身份验证,那么这应该不是问题,因为通过 HTTPS 使用基本身份验证也同样有效(并且更易于编码)。