ASIHTTPRequest 信任自签名证书

2018-07-26  本文已影响74人  权宜平和

关于ASIHTTPRequest如何信任自签名证书,长话短说,如下几步:
1、找到如图所示的文件

image.png ,
进入.m文件,找到initWithURL:方法,如下图所示,添加setCertificate(自定义方法,用来导入自签名证书的)。
image.png
2、setCertificate的具体实现,如下图:
image.png
具体代码如下:
+ (BOOL)extractIdentity:(SecIdentityRef *)outIdentity andTrust:(SecTrustRef*)outTrust fromPKCS12Data:(NSData *)inPKCS12Data
{
    OSStatus securityError = errSecSuccess;
    
    NSDictionary *optionsDictionary = [NSDictionary dictionaryWithObject:@"ZJMC@EAM" forKey:(id)kSecImportExportPassphrase];
    
    CFArrayRef items = CFArrayCreate(NULL, 0, 0, NULL);
    securityError = SecPKCS12Import((CFDataRef)inPKCS12Data,(CFDictionaryRef)optionsDictionary,&items);
    
    if (securityError == 0) {
        CFDictionaryRef myIdentityAndTrust = CFArrayGetValueAtIndex (items, 0);
        const void *tempIdentity = NULL;
        tempIdentity = CFDictionaryGetValue (myIdentityAndTrust, kSecImportItemIdentity);
        *outIdentity = (SecIdentityRef)tempIdentity;
        const void *tempTrust = NULL;
        tempTrust = CFDictionaryGetValue (myIdentityAndTrust, kSecImportItemTrust);
        *outTrust = (SecTrustRef)tempTrust;
    } else {
        NSLog(@"Failed with error code %d",(int)securityError);
        return NO;
    }
    return YES;
}

- (void)setCertificate {
    SecIdentityRef identity = NULL;
    SecTrustRef trust = NULL;
    NSData *PKCS12Data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"zj-server" ofType:@"p12"]];
    [ASIHTTPRequest extractIdentity:&identity andTrust:&trust fromPKCS12Data:PKCS12Data];
    [self setClientCertificateIdentity:identity];
}

3、说明:p12文件是自签名证书对应的一种格式,这里必须是p12类型的,文件来源于创建自签名证书的人员。

其它介绍
ASIHTTPRequest详细介绍

上一篇下一篇

猜你喜欢

热点阅读