Posts

Post not yet marked as solved
1 Replies
200 Views
I am currently working on an app that programmatically connects to wifi hotspot. I have a root and intermediate certificate and I'm trying to add them using setTrustedServerCertificates but xcode is returning "NEHotspotEAPSettings invalid certificate data type" NOTE: caCert and intCert are both SecCertificateRef objects Here's my code     let clientCert = RSAUtils.getClientCertificate(targetPemFile: "client-cert")     let caCert = RSAUtils.getClientCertificate(targetPemFile: "ca.crt")     let intCert = RSAUtils.getClientCertificate(targetPemFile: "int.crt")     KeychainUtils.addToKeychain(certificate: clientCert!, withLabel: "Client-Cert")     KeychainUtils.addToKeychain(certificate: caCert!, withLabel: "CA-Cert")     KeychainUtils.addToKeychain(certificate: intCert!, withLabel: "Int-Cert")     if let filepath = Bundle.main.path(forResource: "client-key", ofType: "pem") {       do {         var contents = try! String(contentsOfFile: filepath)         // remove the header string         let offset = String("-----BEGIN PRIVATE KEY-----").count         let index = contents.index(contents.startIndex, offsetBy: offset+1)         contents = String(contents.suffix(from: index))         // remove the tail string         let tailWord = "-----END PRIVATE KEY-----"         if let lowerBound = contents.range(of: tailWord)?.lowerBound {           contents = String(contents.prefix(upTo: lowerBound))         }         contents = contents.replacingOccurrences(of: "\n", with: "")         let data = NSData(base64Encoded: contents, options:NSData.Base64DecodingOptions.ignoreUnknownCharacters)!         let strippedData = try! RSAUtils.stripPrivateKeyHeader(data as Data)         var privateKey: SecKey?         let attributes = [kSecAttrKeyType: kSecAttrKeyTypeRSA, kSecAttrKeyClass: kSecAttrKeyClassPrivate, kSecAttrKeySizeInBits: 1024] as CFDictionary         var error: Unmanaged<CFError>? = nil         privateKey = SecKeyCreateWithData(strippedData! as CFData, attributes, &error)         let ssidSting = "K3Yhotspot-1"         let hotspotEAPSettings = NEHotspotEAPSettings()         hotspotEAPSettings.isTLSClientCertificateRequired = true         let caCert = KeychainUtils.retrieveCertificate(certificateLabel: "CA-Cert")         let intCert = KeychainUtils.retrieveCertificate(certificateLabel: "Int-Cert")         hotspotEAPSettings.ttlsInnerAuthenticationType = .eapttlsInnerAuthenticationEAP         hotspotEAPSettings.supportedEAPTypes = [NEHotspotEAPSettings.EAPType.EAPTLS.rawValue as NSNumber]         hotspotEAPSettings.setTrustedServerCertificates([caCert, intCert])         //hotspotEAPSettings.setIdentity(SecIdentity) // Still need to add identity here         let hotspotConfig = NEHotspotConfiguration(ssid: ssidSting, eapSettings: hotspotEAPSettings)         NEHotspotConfigurationManager.shared.apply(hotspotConfig) {[unowned self] (error) in           if let error = error {            print("error = ",error)           }           else {            print("Success!")           }         }       }     }
Posted Last updated
.