Выполните проверку подлинности NSURLAuthenticationMethodClientCertificate с помощью crt и pem
Мне нужно реализовать проверку подлинности на iOS 14, мне дали crt и закрытый ключ в виде файла pem.
Я знаю, как создать
SecKey
а также
SecCertificate
из этого, но для вызова мне нужен
SecIdentity
:
public init(identity: SecIdentity, certificates certArray: [Any]?, persistence: URLCredential.Persistence)
Как этого добиться?
Я также попытался создать
.p12
из этих двух файлов, затем импортируйте их через
SecPKCS12Import
чтобы получить оттуда удостоверения личности и сертификат, но это все равно не работает. Есть ли что-то особенное, что я должен учитывать при попытке сделать
URLCredential(identity: ..., certificates: [myCertificate], persistence: .none)
Вот как я получаю сертификат и удостоверение, которые отправляю на сервер:
var certificateRef: SecCertificate? = nil
var items : CFArray?
let securityError: OSStatus = SecPKCS12Import(decodedData, [kSecImportExportPassphrase as NSString : psswd] as CFDictionary, &items)
let theArray: CFArray = items!
if securityError == noErr && CFArrayGetCount(theArray) > 0 {
let newArray = theArray as [AnyObject] as NSArray
let dictionary = newArray.object(at: 0)
let secIdentity = (dictionary as AnyObject)[kSecImportItemIdentity as String] as! SecIdentity
let securityError = SecIdentityCopyCertificate(secIdentity , &certificateRef)
if securityError != noErr {
certificateRef = nil
}
return secIdentity
}