gpt4 book ai didi

objective-c - kSecTrustResultRecoverableTrustFailure 的原因是什么?

转载 作者:可可西里 更新时间:2023-11-01 03:57:32 27 4
gpt4 key购买 nike

我想通过一些额外的检查来验证我的 ssl 服务器证书。有时我会得到一个

kSecTrustResultRecoverableTrustFailure 

代替

kSecTrustResultProceedkSecTrustResultUnspecified

如果

似乎会发生
  • 证书经过 md5 哈希处理 (IOS5)
  • 服务器不提供根证书和中间证书
  • SecTrustSetAnchorCertificatesOnly(trust,YES)已设置且 anchor 证书仅在内置 anchor 证书中
  • 证书已过期
  • ?

这取决于用于评估信任的 AppleX509TP 策略。

我的问题是如果链失败我不想信任,但如果使用 MD5 我想信任。

有没有办法找出评估失败的原因?

作为替代方案,有没有办法从 SecCertificateRef 中提取 CSSM_ALGID_MD5

最佳答案

可能是服务器证书问题....

检查 here ,我解决了我的 kSecTrustResultRecoverableTrustFailure 问题,将 subjectAltName = DNS:example.com 添加到 openssl 配置文件中,特别是在服务器 key 生成中...

如果您没有使用 openssl 来生成它,很抱歉,但我可以帮助您。无论如何,如果您想使用 openssl,here是生成这些 key 并使用您自己的根证书颁发机构签名的好教程。

在本教程中,我只是将我的 openssl 服务器配置文件更改为:

    [ server ]    basicConstraints = critical,CA:FALSE    keyUsage = digitalSignature, keyEncipherment, dataEncipherment    extendedKeyUsage = serverAuth    nsCertType = server    subjectAltName = IP:10.0.1.5,DNS:office.totendev.com    

Hope it helps !

EDITED:

My Server evaluation code:

#pragma mark - SERVER Auth Helper
//Validate server certificate with challenge
+ (BOOL)validateServerWithChallenge:(NSURLAuthenticationChallenge *)challenge {
//Get server trust management object a set anchor objects to validate it
SecTrustSetAnchorCertificates([challenge.protectionSpace serverTrust], (__bridge CFArrayRef)[self allowedCAcertificates]);
//Set to server trust management object to JUST ALLOW those anchor objects assigned to it (ABOVE), and disable apple CA trusts
SecTrustSetAnchorCertificatesOnly([challenge.protectionSpace serverTrust], YES);
//Try to evalute it
SecTrustResultType evaluateResult = kSecTrustResultInvalid; //evaluate result
OSStatus sanityCheck = SecTrustEvaluate([challenge.protectionSpace serverTrust], &evaluateResult);
//Check for no evaluate error
if (sanityCheck == noErr) {
//Check for result
if ([[self class] validateTrustResult:evaluateResult]) { return YES ; }
}
//deny!
return NO ;
}
//Validate SecTrustResulType
+ (BOOL)validateTrustResult:(SecTrustResultType)result {
switch (result) {
case kSecTrustResultProceed: { TDLog(kLogLevelHandshake,nil,@"kSecTrustResultProceed"); return YES ; }
break;
case kSecTrustResultConfirm: { TDLog(kLogLevelHandshake,nil,@"kSecTrustResultConfirm"); return YES ; }
break;
case kSecTrustResultUnspecified: { TDLog(kLogLevelHandshake,nil,@"kSecTrustResultUnspecified"); return YES ; }
break;
case kSecTrustResultDeny: { TDLog(kLogLevelHandshake,nil,@"kSecTrustResultDeny"); return YES ; }
break;
case kSecTrustResultFatalTrustFailure: { TDLog(kLogLevelHandshake,nil,@"kSecTrustResultFatalTrustFailure"); return NO ; }
break;
case kSecTrustResultInvalid: { TDLog(kLogLevelHandshake,nil,@"kSecTrustResultInvalid"); return NO ; }
break;
case kSecTrustResultOtherError: { TDLog(kLogLevelHandshake,nil,@"kSecTrustResultOtherError"); return NO ; }
break;
case kSecTrustResultRecoverableTrustFailure: { TDLog(kLogLevelHandshake,nil,@"kSecTrustResultRecoverableTrustFailure"); return NO ; }
break;
default: { TDLog(kLogLevelHandshake,nil,@"unkown certificate evaluate result type! denying..."); return NO ; }
break;
}

}

希望现在对您有所帮助:)!

关于objective-c - kSecTrustResultRecoverableTrustFailure 的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7715426/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com