我正在试图弄清楚在使用Security.Framework验证证书时证书的撤销时的iOS政策。 我在iOS的文档中找不到相关信息。 在我正在进行的iPad项目的背景下,有理由要求检查某些证书的撤销状态。有关如何使用Security.Framework在证书验证期间强制CRL / OCSP检查的任何想法?或者我是否需要“退回”OpenSSL才能实现这一目标?
似乎在Mac OS X 10.6 CRL / OCSP检查也是可选的,必须通过Keychain Access手动打开。
马亭
我正在试图弄清楚在使用Security.Framework验证证书时证书的撤销时的iOS政策。 我在iOS的文档中找不到相关信息。 在我正在进行的iPad项目的背景下,有理由要求检查某些证书的撤销状态。有关如何使用Security.Framework在证书验证期间强制CRL / OCSP检查的任何想法?或者我是否需要“退回”OpenSSL才能实现这一目标?
似乎在Mac OS X 10.6 CRL / OCSP检查也是可选的,必须通过Keychain Access手动打开。
马亭
苹果公司的这个问题我得到了答案,我在这里发布了完整的答案:
总结一下,iOS上的OCSP实现需要记住几件事:
苹果公司的这个问题我得到了答案,我在这里发布了完整的答案:
总结一下,iOS上的OCSP实现需要记住几件事:
我能够启用CRL检查 SecTrustRef
iOS 10上的对象:
SecTrustRef trust = ...; // from TLS challenge
CFArrayRef oldPolicies;
SecTrustCopyPolicies(trust, &oldPolicies);
SecPolicyRef revocationPolicy = SecPolicyCreateRevocation(kSecRevocationCRLMethod);
NSArray *newPolicies = [(__bridge NSArray *)oldPolicies arrayByAddingObject(__bridge id)revocationPolicy];
CFRelease(oldPolicies);
SecTrustSetPolicies(trust, (__bridge CFArrayRef)newPolicies);
SecTrustSetNetworkFetchAllowed(trust, true);
// Check the trust object
SecTrustResult result = kSecTrustResultInvalid;
SecTrustEvaluate(trust, &result);
// cert revoked -> kSecTrustResultRecoverableTrustFailure
调用 SecTrustSetNetworkFetchAllowed
是关键。没有那个电话, SecTrustEvaluate
回 kSecTrustResultUnspecified
代替。
我刚刚在GCDAsyncSocket上的iOS上做过这个。
对于给定的SecTrustRef信任; 做这个
SecPolicyRef policy = SecPolicyCreateRevocation(kSecRevocationOCSPMethod)
SecTrustSetPolicies(trust, policy);
SecTrustResultType trustResultType = kSecTrustResultInvalid;
OSStatus status = SecTrustEvaluate(trust, &trustResultType);
if (status == errSecSuccess && trustResultType == kSecTrustResultProceed)
{
//good!
}
else
{
//not good
}
//编辑以检查trustResultType