Utilisation de SSLSetEnabledCiphers avec AFNetworking pour désactiver les chiffrements faibles

J'essaie de désactiver certains chiffrements (faibles) tels que DES single, single DES 40 bit etc.

J'ai essayé d'utiliser ce morceau de code de Comment est-ce que l'on définit les chiffrements SSL lors de l'utilisation de CFSocket / CFStream dans Cocoa? et à partir du message de la list de diffusion CFNetwork SSL et des retards de blocage longs, mais j'ai besoin d'accéder aux données de socket pour get le CFDataRef .

Voici le code que j'ai essayé d'insert dans la méthode AFURLConnectionOperation 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); } 

Toute aide serait appréciée.

EDIT: Malheureusement, il s'agit d'un projet existant et il utilise toujours la version 1 de AFNetworking.

Utilisation de SSLSetEnabledCiphers avec AFNetworking pour désactiver les chiffrements faibles

OK, celui-ci a piqué mon intérêt car c'est quelque chose que je fais dans d'autres langues, mais pas Cocoa / CocoaTouch. Il a été sur ma list TODO depuis un certain time. La réponse est que vous ne pouvez pas le faire lorsque vous travaillez avec des objects de haut niveau comme NSURLConnection .

Je ne pouvais pas find un moyen de combler le fossé entre NSURLConnection et ses amis et les trucs de bas niveau nécessaires pour définir les combinaisons de chiffrement. Si vous êtes intéressé, le «plus haut» des choses de bas niveau est CFSocketStream . Le travail consiste donc à faire fonctionner NSURLConnection avec CFSocketStream (ou à accéder à CFSocketStream dans NSURLConnection ).

J'ai également reflété votre question sur la list de diffusion Network Programming d' Apple, et Jens et Quinn l'ont tous deux confirmé (Quinn a fourni l'info sur CFSocketStream ). Voir Configurer le socket utilisé par NSURLConnection? .

De même, si vous ne vous en êtes pas rendu count, essayez de modifier les propriétés dans -connection:didReceiveAuthenticationChallenge: est trop tard. Au moment où vous obtenez le défi d'authentification, la prise de contact est déjà en cours (c'est-à-dire que ClientHello a déjà été envoyé).

Si vous parvenez à find un hack pour le faire, alors postz-le.