OCSP と CRL の両方を使用して、iOS 7.0 で X.509 証明書の失効ステータスを確認しようとしましたが、評価は kSecTrustResultUnspecified (つまり、証明書が信頼されていることを意味します) を返します。チェーン内のすべての証明書を渡します。関連すると思われるコードを以下に記載しました。助けてください!
ありがとう!
PS: ocspOnly と crlOnly は、これらの失効チェック方法のいずれかを排他的に使用するかどうかを示すブール値です。certs は、アンカー証明書を除くチェーン内のすべての証明書を含む NSArray です。アンカー証明書は以前に適切に設定されています。
int evaluationMethod = kSecRevocationRequirePositiveResponse;
if (ocspOnly) {
evaluationMethod |= kSecRevocationOCSPMethod;
} else if (crlOnly) {
evaluationMethod |= kSecRevocationCRLMethod;
} else {
evaluationMethod |= kSecRevocationUseAnyAvailableMethod;
}
if ((status = SecTrustCreateWithCertificates((__bridge CFArrayRef)certs, SecPolicyCreateRevocation(evaluationMethod), &trust)) != errSecSuccess) {
NSLog(@"Failed to create trust with certificate and policy: %ld", status);
return NO;
}
if ((status = SecTrustSetNetworkFetchAllowed(trust, YES)) != errSecSuccess) {
NSLog(@"Failed to activate network fetch: %ld", status);
}
status = SecTrustEvaluate(trust, &trustResult);
if (status != errSecSuccess) {
NSLog(@"Failed to evaluate trust: %ld", status);
return NO;
}
if (trustResult == kSecTrustResultProceed || trustResult == kSecTrustResultUnspecified)
return YES;
return NO;
PS-2: この質問は、こちらの iOS 開発者フォーラムでも尋ねられました。