Certificado de fijación en Alamofire

Estoy creando una aplicación para iPad que accede a los web services HTTPS. Quiero implementar la fijación, pero estoy teniendo problemas.

Esta class crea Alamofire Manager (en su mayor parte de la documentation):

class NetworkManager { var manager: Manager? init() { let serverTrustPolicies: [String: ServerTrustPolicy] = [ "www.google.co.uk": .PinCertificates( certificates: ServerTrustPolicy.certificatesInBundle(), validateCertificateChain: true, validateHost: true ), "insecure.expinetworking-apis.com": .DisableEvaluation ] manager = Alamofire.Manager( configuration: NSURLSessionConfiguration.defaultSessionConfiguration(), serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies) ) } } 

Esta function hace la llamada:

 static let networkManager = NetworkManager() public static func testPinning() { networkManager.manager!.request(.GET, "https://www.google.co.uk").response { response in if response.1 != nil { print("Success") print(response.1) print(response.1?.statusCode) } else { print("Error") print(response.3) } } } 

El certificate se guarda en el proyecto y se muestra en 'Destinos> Fases de compilation> Copiar packages de resources'.

Actualmente recibo el siguiente error cada vez que hago la request (del bloque else en testPinning() ):

 Optional(Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLKey=https://www.google.co.uk/, NSLocalizedDescription=cancelled, NSErrorFailingURLStringKey=https://www.google.co.uk/}) 

Entonces, el problema fue que el certificate se guardó en el formatting incorrecto.

ServerTrustPolicy.certificatesInBundle() encuentra todos los certificates en el package según una list de extensiones, luego intenta cargarlos usando SecCertificateCreateWithData . Por su documentation, esta function:

Devuelve NULL si los datos pasados ​​en el parámetro de datos no son válidos con el certificate X.509 DER codificado

Cuando exporta un certificate en Firefox, tiene una window emergente de "formatting" en la parte inferior del explorador de files. Seleccione "Certificado X.509 (DER)", y debe get un certificate en el formatting correcto para este propósito.