4

我正在开发一个供企业使用的 iOS 应用程序。我们的应用程序将与可能配置有部署我们服务器软件的公司生成的自签名证书的服务器通信。

我们的 iOS 应用程序正在使用允许 SSL Pinning 的 AFNetworking。但我得到的印象是,这只固定 SSL 证书,这些证书在创建时作为应用程序包的一部分包含在内。它不允许您使用 iOS 设备稍后知道的证书。

我正在寻找一种方法让客户推出(可能通过配置文件)自签名证书,以便我们的应用程序可以安全地与服务器通信。有办法吗?或者我是否需要跳过 AFNetworking 并直接使用 Foundation 类。

我也欢迎任何有助于澄清这个问题的评论。

更新:对于其他可能像我一样困惑的人。虽然我理解 pinning 是一个重要的话题,但我把它与我的首要任务混淆了:从我们的原型应用程序中删除对无效证书的支持。我想要的是一种让用户明确信任自签名证书的方法。这很简单。只需将其作为配置文件添加到您的 iOS 设备即可。但我也被我们在开发中使用的自签名证书不太正确,因此 iOS 不会信任它们这一事实绊倒了我。请参阅http://blog.httpwatch.com/2013/12/12/five-tips-for-using-self-signed-ssl-certificates-with-ios/了解如何生成“良好”的自签名证书。现在我已经拥有了受信任的自签名证书,我将跟进如何使用 pinning。

4

1 回答 1

1

你是对的,如果你使用工厂方法,AFSecurityPolicy有一个属性pinnedCertificates默认使用应用程序包中的任何证书。policyWithPinningMode:

要使用您自己的证书,请将此属性设置为包含NSData每个用户证书表示形式的 NSArray:

AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
NSData *certificateData = [NSData dataWithContentsOfFile...
securityPolicy.pinnedCertificates = @[ certificateData ];
于 2014-01-27T14:42:16.093 回答