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

Man*_*Mac 8 iphone ssl cfnetwork ios afnetworking

我试图禁用一些密码(弱),如单DES,单DES 40位等.

我尝试使用这段代码如何在Cocoa中使用CFSocket/CFStream时设置SSL密码?从邮件列表消息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);
}
Run Code Online (Sandbox Code Playgroud)

任何和所有的帮助将不胜感激.

编辑:不幸的是,这是一个现有的项目,它仍然使用AFNetworking的版本1.

jww*_*jww 3

将 SSLSetEnabledCiphers 与 AFNetworking 结合使用来禁用弱密码

好吧,这个引起了我的兴趣,因为我用其他语言做了这件事,但不是 Cocoa/CocoaTouch。它在我的待办事项清单上已经有一段时间了。答案是,当使用像NSURLConnection.

找不到一种方法来弥合朋友之间的差距NSURLConnection以及设置密码套装所需的低级内容。如果您有兴趣,低级内容的“最高”是CFSocketStream。所以工作就是开始NSURLConnection使用 a CFSocketStream(或访问CFSocketStream中的NSURLConnection)。

我还在 Apple 的网络编程邮件列表中反映了您的问题,Jens 和 Quinn 都证实了这一点(Quinn 提供了有关的信息CFSocketStream)。请参阅配置 NSURLConnection 使用的套接字?

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

如果您确实找到了一个 hack 来做到这一点,那么请发布它。

  • 我在互联网上找到了一个黑客来实现这一点。请参阅我对OP问题的评论。我也在邮件列表中阅读了您的问题。非常不幸的是,如果我们无法访问底层套接字,则没有 API 可以指示 NSURLConnection 使用特定的密码套件或至少使用最低的 SSL/TLS 协议版本。:( (2认同)