我们是一家在WCF服务上标准化的.Net商店。我们正在开发一个iPhone应用程序,需要进行安全的Web服务调用以获取应用程序的数据。为确保安全通信,我们在Web服务器上启用了SSL。但这并不能确保服务只能由授权的应用程序使用。我们已将服务配置为支持x509证书身份验证。甚至可以通过IPhone应用程序使用证书身份验证来调用安全的WCF服务吗?
我花了很多时间在互联网上搜索示例,但无济于事。我已经能够成功地调用不安全的WCF服务而没有任何问题。我还对WS-Security和WS-Trust通信标准进行了大量研究。我相信我明白这应该如何运作。我只是在拼凑iPhone框架中的步骤/对象时遇到了麻烦,我需要让它工作。
对此主题的任何想法和想法将不胜感激。
此外,对以下任何内容的任何想法:
答案 0 :(得分:10)
对于初学者,我会说如果你真的认真对待安全问题,请将适当的时间和资源投入其中,并将其视为功能列表中的一等公民。不要只是“打开SSL”并假装事情是安全的。我不是在暗示你这样做或不这样做,但我觉得我必须在继续之前说出来。
也就是说,您可能已经知道WS- *都是建立在http请求之上的,并且每当您执行大量的http请求时,您可能会发现ASIHTTPRequest对iPhone非常有帮助。但是,这不会让你100%的方式。
从iPhone的角度来看,你有:
在Mac上,您可以使用安全传输,但据我所知,他们没有将其移植到设备上,因此除非您计划将其带到桌面,否则我不会太过分心。只是在学习一切的心情:)
如果你正在使用WCF做任何安全性,你可能首先意识到有many options available to you,但这一切都归结为这个简短的列表:
上次我在做WCF(大约一年前)时,由于在尝试保护传输时引入了防火墙/可访问性问题,Microsoft的一般建议似乎是开放传输上的消息层安全性。但是,这种方法假设所涉及的所有各方都支持.NET / WCF。我相信如果它是HTTPS传输级安全性,使用清晰的XML或JSON消息体,在设备上使用会更容易。这样你就可以充分利用Apple所做的CFNetwork和NSHTTPRequest所带来的所有东西。
一旦您开始工作,您将需要参考Enterprise Deployment Guide,特别是有关无线注册的文档,以便您可以在设备上安装证书。请记住,任何事情都是可能的,并且不要害怕使用该程序附带的Apple支持票之一:)
编辑:
我完全忘记提及GenericKeychain和CryptoExcercise示例
编辑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/