判断指定证书是否已受信任

2017-02-04  本文已影响130人  谁更勇猛

可通过此方法判断是否安装了描述文件。

+ (BOOL)IsCertificatesTrusted:(NSArray<NSData *> *)certDatas {
    
    if (certDatas.count == 0) {
        return NO;
    }
    
    CFMutableArrayRef certs = CFArrayCreateMutable(CFAllocatorGetDefault(), 0, &kCFTypeArrayCallBacks);
    
    for (NSData *certData in certDatas) {
        SecCertificateRef cert = SecCertificateCreateWithData(NULL, (__bridge CFDataRef) certData);
        if (!cert) {
            continue;
        }
        
        CFArrayAppendValue(certs, cert);
        CFRelease(cert);
    }
    
    SecPolicyRef policy = SecPolicyCreateBasicX509();
    SecTrustRef trust;
    
    OSStatus err = SecTrustCreateWithCertificates(certs, policy, &trust);
    CFRelease(certs);
    CFRelease(policy);
    if (!trust) {
        return NO;
    }
    if (err != errSecSuccess) {
        CFRelease(trust);
        return NO;
    }
    
    SecTrustResultType trustResult = -1;
    err = SecTrustEvaluate(trust, &trustResult);
    CFRelease(trust);
    if (err != errSecSuccess) {
        return NO;
    }
    
    if(trustResult == kSecTrustResultUnspecified) {
        return YES;
    } else {
        return NO;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读