iPhone使用证书认证调用WCF服务的Web服务

13
我们是一家采用 WCF Services 标准的 .Net 商店。我们正在开发一个 iPhone 应用程序,需要进行安全的网络服务调用以获取应用程序数据。为确保安全通信,我们已在我们的 Web 服务器上启用了 SSL。但这并不能保证只有经过授权的应用程序才能使用服务。我们已配置我们的服务来支持 x509 证书身份验证。从 iPhone 应用程序中使用证书身份验证调用安全的 WCF 服务是否可能?
我花了很多时间在互联网上搜索实例,但没有结果。我已成功地调用了一个不安全的 WCF 服务而没有问题。我还对 WS-Security 和 WS-Trust 通讯标准进行了大量研究。我相信我理解了如何工作,只是在拼凑我需要使其工作的 iPhone 框架中的步骤/对象时遇到了麻烦。
关于以下任何想法和建议都将非常感激。
此外,对以下任何想法都有所考虑:
1. 如何最好地部署 P12 证书文件与 iPhone 应用程序 2. 如何最好地保护应用程序内的 P12 文件密码 3. 部署 P12 文件是否是最佳做法 4. 是否有 iPhone 框架内的设施支持这种类型的安全通信?如果没有,那么有什么替代建议。

这个问题在这里有一些信息:https://dev59.com/P3E95IYBdhLWcg3wlu-z - Development 4.0
3
Maike9,你在这方面有任何成功经验吗? - dredful
5个回答

10
首先,如果你真的很注重安全,请将足够的时间和资源投入其中,并将其视为功能列表中的一等公民。不要只是“打开SSL”并假装事情很安全。我不是在建议你是否这样做或不这样做,但在继续之前我觉得我必须这样说。
话虽如此,你可能已经知道WS-*是构建在HTTP请求之上的,而每当你进行大量的HTTP请求时,在iPhone上使用ASIHTTPRequest可能会非常有帮助。然而,那并不能让你完全达到目标。
从iPhone的角度来看,你有:
  1. URL加载系统是一种高级API,用于处理任何类型的网络资源
  2. CFNetwork C API更低级,允许您以任何您认为合适的方式控制加密流和网络流量
  3. 证书、密钥和信任服务承担了大部分工作,更具体地说X509信任策略

在Mac上,您可以使用Secure Transport,但据我所知,他们还没有将其移植到设备上,因此除非您计划将其带到桌面或只是想学习所有内容,否则不要太分心 :)

如果您正在使用WCF进行任何安全操作,那么您可能已经意识到有许多选项可供选择, 但最终都归结为以下简短的列表:
  1. 在明文消息(xml / json / ...)上使用传输层安全性(https)
  2. 通过开放传输(http)进行消息层安全性(加密消息正文)
  3. 通过安全传输进行安全消息
我上次使用WCF(大约一年前),微软的一般建议似乎是通过开放传输实现消息层安全性,因为在尝试保护传输时引入了防火墙/可访问性问题。 然而,这种方法假定所有涉及方都具备.NET / WCF能力。 如果它是HTTPS传输级别安全性,并带有清晰的XML或JSON消息正文,则我认为在设备上消耗会更容易。 这样,您就可以利用苹果内置的CFNetwork和NSHTTPRequest中的所有内容。
一旦您得到了可行的解决方案,您将想要参考企业部署指南,特别是关于无线电子邮件注册的文档,以便您可以在设备上安装证书。 记住,任何事情都是可能的,不要害怕使用该程序附带的Apple支持票据:)
编辑:
我完全忘记提到GenericKeychainCryptoExcercise的例子。
编辑2:
在没有明显原因的情况下被投票否决后,我重新阅读了我的回答,并意识到我有点啰嗦,实际上没有回答你关于如何在设备上打开p12文件的问题。您应该能够简单地[[UIApplication sharedApplication] openURL:urlToP12FileEitherLocalOrRemote]]并将其传递给操作系统进行安装程序。

3
您可以在消息级别上使用 SSL + 用户名/密码身份验证。

我们该怎么做呢?我是新手,你能详细解释一下吗? - smoothumut
http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2006/06/08/5848.aspx - Yaron Naveh

1

通常,如果您想在iPhone上安装证书,我发现有两个选项(都来自这里):

  • 将证书发送到收件人的电子邮件。如果它是有效的证书并且电子邮件中的标题顺序正确,则会允许电子邮件的接收者安装证书。当然,这里的问题是中间人攻击。

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

这应该可以帮助您部分完成(在本地安装证书)。我应该指出的是,一般来说,您不希望为整个应用程序安装一个证书,而是为您的用户提供单独的证书。作为一般做法,验证应用程序非常糟糕的事情,而您应该验证用户

但是,如果您已经验证了用户,则这不应该是一个问题,因为在HTTPS上使用基本身份验证也可以正常工作(并且更容易编码)。


请您提供任何原因/链接来解释为什么对应用程序进行身份验证是一件非常糟糕的事情?我还想确保我的服务只能被授权的应用程序使用,而不是任何安装了这些应用程序的用户。 - Michael Freidgeim

0

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

我认为证书可能需要来自受信任的CA(证书颁发机构),才能使其工作。据我记得,我曾经在iPhone SDK上使用自签名证书时遇到了麻烦,但这在过去一年里可能已经改变了...


0

iPhone应该能够访问证书安全的WCF应用程序。如果您将WCF服务设置为Azure ACS的RP,则可以使用OAuth等方法来使其运行。

在此处查看更多示例:http://acs.codeplex.com/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接