我正在尝试弄清楚在使用Security.Framework验证证书时iOS的策略是什么。我在iOS的文档中找不到关于这方面的信息。在我目前正在从事的一个iPad项目的上下文中,有理由要求检查某些证书的撤销状态。谁知道如何使用Security.Framework在证书验证过程中强制执行CRL / OCSP检查?或者我需要“退回”到OpenSSL来完成这件事吗?
似乎在MacOSX10.6上,CRL / OCSP检查也是可选的,并且必须通过Keychain访问手动打开。
马提金
发布于 2012-03-03 05:36:47
我有一个苹果家伙的问题的答案,我在这里发布了完整的答案:
Details on SSL/TLS certificate revocation mechanisms on iOS
总而言之,要在iOS上实现OCSP,需要记住几件事:
发布于 2015-04-21 07:42:11
我刚刚在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
发布于 2017-08-31 02:48:54
我能够在iOS 10上启用SecTrustRef对象的CRL检查:
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。
https://stackoverflow.com/questions/5625642
复制相似问题