2010-02-11 163 views
13

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

我花了很多小时在网上搜索例子,但无济于事。我已经能够成功地调用一个没有问题的不安全的WCF服务。我还对WS-Security和WS-Trust通信标准进行了大量研究。我相信我明白这应该如何工作。我只是无法将我需要的iPhone框架内的步骤/对象拼接在一起。

关于这个问题的任何想法和想法将不胜感激。

此外,在任何的任何想法如下:

  1. 如何最好地部署与iPhone应用程序的P12认证文件文件
  2. 如何最好地为P12文件的应用内的安全密码
  3. 正在部署带有应用程序的P12文件最佳做法
  4. iPhone框架内是否有支持这种安全通信的设备?如果不是,那么会有什么替代建议。
+0

这个问题上有一些信息:http://stackoverflow.com/questions/2244764/iphone-web-service-calls-to-wcf-服务与证书认证 – 2010-03-25 16:35:59

+3

Maike9,你有这个成功吗? – dredful 2010-10-12 21:44:02

回答

1

一般来说,如果要安装在iPhone上的证书,还有我发现两个选项(两者从here):

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

  • 使用iPhone enterpirse配置实用程序。

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

但是,如果您已经对用户进行了身份验证,那么这不应该成为一个问题,因为使用基于HTTPS的基本身份验证可以同样如此(并且更容易编写代码)。

+0

您能否提供任何理由/链接来解释为什么验证应用程序是一件非常糟糕的事情?我还希望确保我的服务只能由授权的应用程序使用,但只能由安装了这些应用程序的任何用户使用。 – 2011-07-22 19:21:44

3

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

+0

我们该怎么做?我是新来的,所以你能详细解释一下吗? – smoothumut 2015-01-27 15:09:14

+0

http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2006/06/08/5848.aspx – 2015-01-28 20:16:22

0

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

我认为证书可能需要来自可信任的CA(证书颁发机构)才能使其正常工作。从内存来看,我用自签名证书有iPhone SDK的困难,但这可能在去年发生了变化...

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

在Mac上,您可以使用安全传输,但据我所知,他们没有将其移植到设备上,所以我不会因此而分心,除非您打算将其用于桌面或只是心情去学习一切:)

如果你正在做与WCF任何安全,你可能已经意识到的第一件事是,有many options available to you,但是这一切都归结为这个短名单:

  1. 带明文信息的传输层安全(https)(xml/json/...)
  2. 消息层安全性(加密的messa GE体)在开放交通(HTTP)
  3. 通过安全运输

上次我在做WCF安全邮件(约一年前)从微软一般建议似乎在是消息层安全由于尝试保护传输时引入防火墙/可访问性问题而导致开放的传输。但是,这种方法假定所有相关方都具有.NET/WCF功能。如果它是HTTPS传输级别的安全性,并且具有清晰的XML或JSON消息主体,我相信在设备上使用它会更容易。这样你就可以利用苹果公司已经完成的所有CFNetwork和NSHTTPRequest功能。

一旦你得到了一些工作,你会想参考Enterprise Deployment Guide,特别是在空中登记文件,以便您可以在设备上安装证书。请记住,一切皆有可能,而不要害怕使用那些支持苹果门票附带的程序:)一个

编辑:

我完全忘了提GenericKeychainCryptoExcercise例子

编辑2:

当我没有明显的原因downvoted后,我重新读我的回应,并意识到我没有回答你如何打开设备上的p12文件的问题太多了。您应该能够简单地将[[UIApplication sharedApplication] openURL:urlToP12FileEitherLocalOrRemote]]安装到操作系统中,以便安装过程。

0

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

看看样品这里更多:http://acs.codeplex.com/