使用带有AFNetworking的SSLSetEnabledCiphers来禁用弱密码

时间:2014-07-28 19:12:08

标签: ios iphone ssl afnetworking cfnetwork

我正在尝试禁用某些密码(弱),例如单个DES,单个DES 40位等。

我尝试使用How does one set SSL ciphers when using CFSocket/CFStream in Cocoa?和邮件列表消息CFNetwork SSL and long blocking delays中的这段代码,但我需要访问套接字数据才能获得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版。

1 个答案:

答案 0 :(得分:3)

  

将SSLSetEnabledCiphers与AFNetworking一起使用以禁用弱密码

好的,这个引起了我的兴趣,因为它是我用其他语言做的,但不是Cocoa / CocoaTouch。它已经在我的TODO列表上了一段时间。答案是,在使用NSURLConnection等高级对象时,你无法做到这一点。

我可以找到一种方法来弥合NSURLConnection和朋友之间的差距以及设置密码套装所需的低级别内容。如果您感兴趣,那么低级别内容的“最高”是CFSocketStream。因此,我们的工作是NSURLConnection使用CFSocketStream(或访问CFSocketStream中的NSURLConnection)。

我还在Apple的Network Programming邮件列表上反映了您的问题,Jens和Quinn都证实了这一点(Quinn在CFSocketStream提供了信息)。请参阅Configure socket used by NSURLConnection?

另外,如果您没有意识到这一点,尝试修改-connection:didReceiveAuthenticationChallenge:中的属性为时已晚。当您收到身份验证质询时,握手已在进行中(即ClientHello已经发送)。

如果您确实设法找到了黑客,那么请发布它。