В моем приложении я делаю запрос к серверу с самозаверяющим сертификатом. Я обрабатываю URLAuthenticationChallenge в пользовательском делегате.
В этом делегате я могу автоматически доверять серверу без проблем. Однако я хочу использовать соответствующий файл root.crt
для оценки доверия к серверу. Файл root.crt
входит в комплект приложения. У меня есть функция, которая проверяет, можно ли доверять серверу, используя файл root.crt
. Однако, это не работает так, как я думаю. Вот моя попытка написать функцию, которая проверяет сервер на наличие файла root.crt
.
func checkValidity(of secTrust: SecTrust) -> Bool {
// get path to certificate
guard let url = Bundle.main.url(forResource: "root", withExtension: "crt") else {
print("No root certificate found")
return false
}
// read root.crt data
guard let certData = NSData(contentsOf: url) else {
print("Unable to get data from root.crt")
return false
}
// get a pointer to the certificate
var rawPtr = Optional(certData.bytes)
let unsafePtr = withUnsafeMutablePointer(to: &rawPtr, { $0 })
// create an array containing the certificate data
guard let certs = CFArrayCreate(nil, unsafePtr, 1, nil) else {
return false
}
// add the certificate as an anchor certificate
SecTrustSetAnchorCertificates(secTrust, certs)
SecTrustSetAnchorCertificatesOnly(secTrust, false)
var result = SecTrustResultType.deny
let resultPtr = withUnsafeMutablePointer(to: &result, { $0 })
SecTrustEvaluate(secTrust, resultPtr)
if result == .proceed || result == .unspecified {
return true
} else {
return false
}
}
Проблема в том, что что-то идет не так при попытке установить сертификаты привязки. Если кто-нибудь знает, как проверить самозаверяющий сервер сертификатов на файл crt
, любая помощь будет признательна.