当前位置:  开发笔记 > IOS > 正文

Objective-C/Cocoa:我如何接受错误的服务器证书?

如何解决《Objective-C/Cocoa:我如何接受错误的服务器证书?》经验,为你挑选了1个好方法。

使用NSURLRequest,我试图访问具有过期证书的网站.当我发送请求时,我的连接:didFailWithError委托方法被调用,具有以下信息:

-1203, NSURLErrorDomain, bad server certificate

我的搜索只提出了一个解决方案:NSURLRequest中的隐藏类方法:

[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:myHost];

但是,出于显而易见的原因,我不想在生产应用程序中使用私有API.

有关该怎么办的任何建议?我是否需要使用CFNetwork API,如果是,则需要两个问题:

我可以用来开始的任何示例代码?我还没有找到任何在线.

如果我使用CFNetwork,我是否必须完全放弃NSURL?


编辑:

iPhone OS 3.0引入了支持这种方法.更多详细信息:如何使用NSURLConnection连接SSL以获取不受信任的证书?



1> Louis Gerbar..:

支持这种方式需要使用CFNetwork.您需要做的是将kCFStreamPropertySSLSettings附加到指定kCFStreamSSLValidatesCertificateChain == kCFBooleanFalse的流.下面是一些快速编写的代码,减去检查有效结果添加清理.完成此操作后,您可以使用CFReadStreamRead()来获取数据.

CFURLRef myURL = CFURLCreateWithString(kCFAllocatorDefault, CFSTR("http://www.apple.com"), NULL);
CFHTTPMessageRef myRequest = CFHTTPMessageCreateRequest(kCFAllocatorDefault, CFSTR("GET"), myURL, kCFHTTPVersion1_1);
CFReadStreamRef myStream = CFReadStreamCreateForHTTPRequest(kCFAllocatorDefault, myRequest);
CFMutableDictionaryRef myDict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(myDict, kCFStreamSSLValidatesCertificateChain, kCFBooleanFalse);
CFReadStreamSetProperty(myStream, kCFStreamPropertySSLSettings, myDict);    
CFReadStreamOpen(myStream);

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有