我正在开发一个注定要在IT企业中使用的应用。该应用程序将是通过VM映像分发给企业的管理系统的扩展。问题在于VM附带自签名证书并被锁定。显然我在iOS中有一个信任该证书的问题。我知道我可以禁用验证,但对于app store目标产品而言,这是一个可怕的想法并且毫无意义。所以我想知道,我的选择是什么?
答案 0 :(得分:1)
我知道我可以禁用验证,但这对于app store目标产品而言是一个可怕的想法并且毫无意义。所以我想知道,我的选择是什么?
禁用验证是一个坏主意。
您需要在委托中实施-(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace: (NSURLProtectionSpace*)space
和- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge: (NSURLAuthenticationChallenge *)challenge
以信任服务器的证书。
Apple的官方文档位于Authentication Challenges and TLS Chain Validation和Overriding 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)