Usar SSLSetEnabledCiphers con AFNetworking para deshabilitar encryptions débiles

Estoy intentando deshabilitar algunos encryptions (débiles), como un solo DES, único DES 40 bit, etc.

He intentado usar este bit de código de ¿Cómo se establecen los encryptions SSL cuando se usa CFSocket / CFStream en Cocoa? y desde el post de list de correo CFNetwork SSL y largos retrasos de locking, pero necesito acceso a los datos de socket para get CFDataRef .

Aquí está el código que intenté insert en el método del apretón de manos en la class AFURLConnectionOperation :

 - (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge (NSURLAuthenticationChallenge *)challenge{ CFReadStreamRef stream = [sock getCFReadStream]; CFDataRef data = CFReadStreamCopyProperty(stream, kCFStreamPropertySocketSSLContext); // Extract the SSLContextRef from the CFData SSLContextRef sslContext; CFDataGetBytes(data, CFRangeMake(0, sizeof(SSLContextRef)), &sslContext); // Get all enabled ciphers size_t numCiphers; SSLGetNumberEnabledCiphers(sslContext,&numCiphers); SSLCipherSuite ciphers[numCiphers]; SSLGetEnabledCiphers(sslContext,ciphers,&numCiphers); // Create a new cipher array with only non-DH ciphers, and set it SSLCipherSuite finalCiphers[numCiphers]; int numFinalCiphers = 0; for(int i=0; i<numCiphers; i++) { SSLCipherSuite suite = ciphers[i]; if(!cipherSuiteUsesDH(suite)) { finalCiphers[numFinalCiphers] = suite; numFinalCiphers++; } } SSLSetEnabledCiphers(sslContext,finalCiphers,numFinalCiphers); } 

Cualquier y toda ayuda sería apreciada.

EDIT: Desafortunadamente, este es un proyecto existente y todavía usa la versión 1 de AFNetworking.

Usar SSLSetEnabledCiphers con AFNetworking para deshabilitar encryptions débiles

De acuerdo, este despertó mi interés porque es algo que hago en otros idiomas, pero no Cocoa / CocoaTouch. Ha estado en mi list de TODO por algún time. La respuesta es que no puede hacerlo cuando trabaja con objects de alto nivel como NSURLConnection .

No pude encontrar una manera de cerrar la brecha entre NSURLConnection y amigos y las cosas de bajo nivel necesarias para configurar los trajes de encryption. Si estás interesado, lo más "alto" que se puede encontrar en el nivel bajo es CFSocketStream . Entonces, el trabajo consiste en hacer que NSURLConnection funcione con un CFSocketStream (o acceder a CFSocketStream en la NSURLConnection ).

También reflejé su pregunta en la list de correo de network programminges de Apple, y Jens y Quinn lo confirmaron (Quinn proporcionó la información sobre CFSocketStream ). Consulte Configurar el socket utilizado por NSURLConnection? .

Además, en caso de que no te hayas dado count, intenta modificar las properties en -connection:didReceiveAuthenticationChallenge: es demasiado tarde. En el momento en que reciba el desafío de authentication, el apretón de manos ya está en curso (es decir, el ClientHello ya ha sido enviado).

Si logras encontrar un truco para hacerlo, entonces publícalo.