I am trying to import certificate to device keychain which I am getting my API. I have used these reference to save received data in certificate format. references: (SecPKCS12Import returns different results on iOS 11 than on iOS 10)
and Add Certificate to IOS Keychain in Swift
By doing some modification inorder to add the certificate to keychain I have done below code:
` func certificateFromCertificate(certP12: Data, psswd: String) {
let decodedData = certP12
let keytmp : NSString = kSecImportExportPassphrase as NSString
let options : NSDictionary = [keytmp : psswd]
var certificateRef: SecCertificate? = nil
var items : CFArray?
let securityError: OSStatus = SecPKCS12Import(decodedData as CFData, options, &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
}
}
var keychainQueryDictionary = [String : Any]()
if let tempSecCert = certificateRef {
keychainQueryDictionary = [kSecClass as String : kSecClassCertificate, kSecValueRef as String : tempSecCert, kSecAttrLabel as String: "My Certificate"]
}
let summary = SecCertificateCopySubjectSummary(certificateRef!)! as String
print("Cert summary: (summary)")
let status = SecItemAdd(keychainQueryDictionary as CFDictionary, nil)
print(SecCopyErrorMessageString(status, nil))
}`
I am getting proper certificate summary and also this print(SecCopyErrorMessageString(status, nil))
is returning no error. Optional(No error.)
Doubt I have is whether this certificate is properly installed in the device keychain or not. How do I verify that? Please note I don’t want to forcefully trust the certificate .
I tried
`var keychainQueryDictionary = String : Any
if let tempSecCert = certificateRef {
keychainQueryDictionary = [kSecClass as String : kSecClassCertificate, kSecValueRef as String : tempSecCert, kSecAttrLabel as String: "My Certificate"]
}
let summary = SecCertificateCopySubjectSummary(certificateRef!)! as String
print("Cert summary: (summary)")
let status = SecItemAdd(keychainQueryDictionary as CFDictionary, nil)`
This to import the certificate to keychain of the device. I want to verify if it is installed successfully.