我正在使用x509证书并验证这些证书的信任。我能够将x509证书“导入”到SecCertificateRef对象中,但我所担心的是验证信任。这就是我现在所拥有的:
SecCertificateRef certificateRef = SecCertificateCreateWithData((CFAllocatorRef)NULL, (__bridge CFDataRef)(x509Certificate));
SecTrustRef trustRef = nil;
SecPolicyRef policyRef = SecPolicyCreateBasicX509();
SecTrustResultType trustResultType;
SecCertificateRef evalCertArray[1] = { certificateRef };
CFArrayRef cfCertRef = CFArrayCreate ((CFAllocatorRef) NULL,(void *)evalCertArray, 1,&kCFTypeArrayCallBacks);
OSStatus status1 = SecTrustCreateWithCertificates (cfCertRef, policyRef, &trustRef);
OSStatus status2 = SecTrustEvaluate (trustRef, &trustResultType);
现在这段代码会给我一个trustResultType
kSecTrustResultRecoverableTrustFailure
。当我得到这个结果时,我提示用户该证书是否应该被信任,如果用户选择是,我正在执行此代码“
CFDataRef errDataRef = SecTrustCopyExceptions(trustRef);
SecTrustSetExceptions(trustRef, errDataRef);
SecTrustEvaluate(trustRef, &trustResultType);
理论上,这应该返回kSecTrustResultUnspecified
或kSecTrustResultProceed
。我的问题是,如果我需要再次检查同一证书的信任,那么记住这个值的最佳方法是什么。我是否需要将修改后的SecTrustRef(有例外)存储在钥匙串中以备将来使用。或者只是有一个与该证书相关联的标志,说明该证书是否可信,是否可以?
答案 0 :(得分:0)
我的问题是,如果我需要再次检查同一证书的信任,那么记住此值的最佳方法是什么。
使用NSUserDefault
保存用户设置。例如,请参阅Storing User Data iOS。
我是否需要将修改过的SecTrustRef(有例外)存储在钥匙串中以备将来使用。
您的用户是否需要撤回他/她的信任?
或者只是有一个与该证书相关联的标志,表明该证书是可信的吗?
您可以随意存储它。在我看来,你需要一张证书地图< - >状态。我想象一个用户可能也希望永远不会信任证书的情况。