使用带有AFNetworking的SSLSetEnabledCiphers来禁用弱密码
我试图禁用一些密码(弱),如单个DES,单个DES 40位等
我试过使用这一点的代码如何设置SSL密码在cocoa中使用CFSocket / CFStream? 并从邮件列表消息CFNetwork SSL和长阻塞延迟,但我需要访问套接字数据来获取CFDataRef
。
下面是我尝试在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); }
任何和所有的帮助,将不胜感激。
编辑:不幸的是,这是一个现有的项目,它仍然使用AFNetworking的版本1。
使用带有AFNetworking的SSLSetEnabledCiphers来禁用弱密码
好吧,这个引起了我的兴趣,因为它是我用其他语言做的事情,而不是Cocoa / CocoaTouch。 它在我的TODO名单上已经有一段时间了。 答案是你在使用NSURLConnection
这样的高级对象时无法做到这一点。
我无法find弥合NSURLConnection
和朋友之间的差距和设置密码套装所需的低级别东西的方法。 如果你有兴趣,低级别的“最高”就是CFSocketStream
。 所以这个工作是让NSURLConnection
和CFSocketStream
一起工作(或者访问NSURLConnection
的CFSocketStream
)。
我还在苹果的networking编程邮件列表上反映了你的问题,Jens和Quinn证实了这一点(Quinn提供了关于CFSocketStream
的信息)。 请参阅configuration由NSURLConnection使用的套接字? 。
此外,如果您没有意识到,试图修改-connection:didReceiveAuthenticationChallenge:
的属性为时已晚。 当你得到身份validation的挑战时,握手已经在进行(即ClientHello
已经被发送)。
如果你设法find一个黑客做,那么请张贴它。