2017-06-05 7 views
0

にインストールされた証明書を検出:は、私はiOSの11があり、このコードは私のインストールカスタム証明書を検出していないのiOSデバイス11

- (BOOL)IsMobileConfigInstalled { 
    NSString *certPath = [[NSBundle mainBundle] pathForResource:@"cert" ofType:@"der"]; 
    NSData *certData = [NSData dataWithContentsOfFile:certPath]; 
    SecCertificateRef cert = NULL; 
    if ([certData length]) { 
     cert = SecCertificateCreateWithData(NULL, (__bridge CFDataRef) certData); 
     if (cert != NULL) { 
      CFStringRef certSummary = SecCertificateCopySubjectSummary(cert); 
      NSString *summaryString = [[NSString alloc] initWithString:(__bridge NSString *) certSummary]; 
      CFRelease(certSummary); 
     } 
    } 
    SecPolicyRef policy = SecPolicyCreateBasicX509(); 
    SecTrustRef trust; 
    OSStatus err = SecTrustCreateWithCertificates((__bridge CFArrayRef) @[ 
      (__bridge id) cert 
    ], policy, &trust); 
    SecTrustResultType trustResult = (SecTrustResultType) -1; 
    err = SecTrustEvaluate(trust, &trustResult); 
    CFRelease(trust); 
    CFRelease(policy); 
    CFRelease(cert); 
    return kSecTrustResultUnspecified == trustResult; 
} 

問題は何ですか?

+0

問題は、あなたがそれをすることになっているかを説明しなかったことですそれは代わりに何をするのですか?もう1つの問題は、まずiOS 10でこれを試してみることです。 – deadbeef

+0

@deadbeefもちろんios 10で動作しています。そして、すでにこのアプリをリリース... – MeGaPk

答えて

0

問題を解決しました。 Appleは単に "fixed"という結果をtrustResultに出力します。

だから、今corrent答え:kSecTrustResultProceed

マイ固定コードバージョン:iOSの 作業10と11

- (BOOL)IsMobileConfigInstalled { NSString *certPath = [[NSBundle mainBundle] pathForResource:@"cert" ofType:@"der"]; NSData *certData = [NSData dataWithContentsOfFile:certPath]; SecCertificateRef cert = NULL; if ([certData length]) { cert = SecCertificateCreateWithData(NULL, (__bridge CFDataRef) certData); if (cert != NULL) { CFStringRef certSummary = SecCertificateCopySubjectSummary(cert); NSString *summaryString = [[NSString alloc] initWithString:(__bridge NSString *) certSummary]; CFRelease(certSummary); } } SecPolicyRef policy = SecPolicyCreateBasicX509(); SecTrustRef trust; OSStatus err = SecTrustCreateWithCertificates((__bridge CFArrayRef) @[ (__bridge id) cert ], policy, &trust); SecTrustResultType trustResult = (SecTrustResultType) -1; err = SecTrustEvaluate(trust, &trustResult); CFRelease(trust); CFRelease(policy); CFRelease(cert); NSString *ver = [[UIDevice currentDevice] systemVersion]; float ver_float = [ver floatValue]; if (ver_float >= 11) return kSecTrustResultProceed == trustResult; return kSecTrustResultUnspecified == trustResult; }

関連する問題