Comprobación de una key pública en canAuthenticateAgainstProtectionSpace

Se me pidió que revise la key pública contra un valor conocido en canAuthenticateAgainstProtectionSpace (una callback de delegado de NSURLConnection )

Esto es lo que tengo hasta ahora:

 - (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace { SecKeyRef publicKey = SecTrustCopyPublicKey([protectionSpace serverTrust]); NSLog(@"%@",SecTrustCopyPublicKey([protectionSpace serverTrust])); return YES; } 

¿Cómo puedo comparar la key pública con un valor conocido?

El NSLog produce: <SecKeyRef: 0x687c000> que no varía su utilidad.

En caso de que a alguien le importe, la solución era comprobar el byte de certificación por byte con un certificate guardado en el package.

 - (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace { SecTrustRef trust = [protectionSpace serverTrust]; SecCertificateRef certificate = SecTrustGetCertificateAtIndex(trust, 0); NSData* ServerCertificateData = (NSData*) SecCertificateCopyData(certificate); // Check if the certificate returned from the server is identical to the saved certificate in // the main bundle BOOL areCertificatesEqual = ([ServerCertificateData isEqualToData:[MyClass getCertificate]]); [ServerCertificateData release]; if (!areCertificatesEqual) { NSLog(@"Bad Certificate, canceling request"); [connection cancel]; } // If the certificates are not equal we should not talk to the server; return areCertificatesEqual; } 

Tenga en count que SecCertificateCopyData devuelve el certificate en su formulario "DER", Reglas de encoding distinguidas. Por lo tanto, debe incorporar el certificate en su aplicación en ese formulario, y no como un file PEM o formatting. Para convertir un certificate a DER con openssl, use el command: openssl x509 -in server.crt -out server.der -outform DER