iOS允许用户信任某些证书?

时间:2014-07-13 00:57:55

标签: ios objective-c ssl

我正在开发一个注定要在IT企业中使用的应用。该应用程序将是通过VM映像分发给企业的管理系统的扩展。问题在于VM附带自签名证书并被锁定。显然我在iOS中有一个信任该证书的问题。我知道我可以禁用验证,但对于app store目标产品而言,这是一个可怕的想法并且毫无意义。所以我想知道,我的选择是什么?

2 个答案:

答案 0 :(得分:1)

  

我知道我可以禁用验证,但这对于app store目标产品而言是一个可怕的想法并且毫无意义。所以我想知道,我的选择是什么?

禁用验证是一个坏主意。

您需要在委托中实施-(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace: (NSURLProtectionSpace*)space- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge: (NSURLAuthenticationChallenge *)challenge以信任服务器的证书。

Apple的官方文档位于Authentication Challenges and TLS Chain ValidationOverriding TLS Chain Validation Correctly

您可以在iOS示例中的OWASP' Certificate and Public Key Pinning中看到它的示例。

因为您具有先验了解服务器证书的内容,所以您可以将其直接编译到您的应用程序中并在运行时利用它。没有必要跳过箍把它放在钥匙串里。

由于您拥有受信任的分销渠道(App Store或组织的企业商店),因此您不必担心篡改(某些人放弃)。

另见How to use NSURLConnection to connect with SSL for an untrusted cert?,但要小心。要小心,因为它基本上会通过总是返回[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];来禁用验证。我指出了它,因为它是iOS功能的答案。

答案 1 :(得分:1)