У меня есть два сертификата:
signature.der
и root.der
signature.der
могут иногда меняться и больше не действительны в этом случае, я загружаю новый из бэкэнда.
Теперь, когда я загружаю новый, мне нужно проверить, действителен ли он с root.der
CA, и я не могу этого сделать.
SecTrustEvaluate
всегда возвращает неопределенноедаже если я отредактирую signature.der и сделаю его недействительным вручную.
Это то, что у меня так далеко от перспективы кода:
func isPublicCertificateValid(publicKeyData: Data, rootKeyData: Data) -> Bool {
guard let publicKeyCert = SecCertificateCreateWithData(nil, publicKeyData as CFData) else { return false }
guard let rootCert = SecCertificateCreateWithData(nil, rootKeyData as CFData) else { return false }
let policy = SecPolicyCreateBasicX509()
var trust: SecTrust?
var status: OSStatus = SecTrustCreateWithCertificates([rootCert, publicKeyCert] as CFTypeRef, policy, &trust)
var trustResult: SecTrustResultType = SecTrustResultType(rawValue: 0)!
SecTrustSetAnchorCertificates(trust!, [rootCert, publicKeyCert] as CFArray)
SecTrustSetAnchorCertificatesOnly(trust!, false)
if status == noErr {
status = SecTrustEvaluate(trust!, &trustResult)
}
switch status {
case noErr:
return true
default:
return false
}
}