其实iOS系统的网络请求都有校验,比如NSURLConnection、NSURLSession都有系统的自动校验。具体的校验可进行百度
我使用的是NSURLConnection进行的网络请求,NSURLConnection是代理回调的请求方式,其中有两个代理方法是用于进行校验证书的
另外我说一下我们的需求,我们要求使用指定的CA证书进行校验不能使用系统的校验,系统的校验可自行百度,他校验证书的信任列表。但是如果我使用fiddler 进行抓取https,让fiddler自己生成一个自签名的证书,然后把这个证书装到客户端信任列表,那么fiddler就能获取https请求数据,因为系统的校验证书是可以校验通过的,所以我们要禁止这种截获数据,因此有了自定义校验证书
好了 不多说了 上代码
//https 证书验证
- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)prote {
///NO 系统进行管理 YES 调用connection: didReceiveAuthenticationChallenge 进行验证
return YES;
}
//手动验证 https 证书
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
// 获取der格式CA证书路径
NSString *certPath = [[NSBundle mainBundle] pathForResource:@"CustomCA" ofType:&#