ios - 将 SSLSetEnabledCiphers 与 AFNetworking 结合使用以禁用弱密码

标签 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。

最佳答案

Using SSLSetEnabledCiphers with AFNetworking to disable weak ciphers

好吧,这个引起了我的兴趣,因为它是我用其他语言做的事情,但不是 Cocoa/CocoaTouch。它在我的 TODO 列表中已经有一段时间了。答案是在使用像 NSURLConnection 这样的高级对象时你不能这样做。

无法找到一种方法来弥合 NSURLConnection 和 friend 之间的差距以及设置密码套装所需的低级内容。如果您有兴趣,低级别的“最高”是 CFSocketStream。因此,工作是让 NSURLConnectionCFSocketStream 一起工作(或访问 NSURLConnection 中的 CFSocketStream)。

我也在 Apple 的 Network Programming 上反射(reflect)了你的问题。邮件列表,Jens 和 Quinn 都证实了这一点(Quinn 在 CFSocketStream 上提供了信息)。参见 Configure socket used by NSURLConnection? .

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

如果您确实找到了破解方法,请发布。

关于ios - 将 SSLSetEnabledCiphers 与 AFNetworking 结合使用以禁用弱密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25002556/

相关文章:

ios - List 对象的 SwiftUI 分页

iPhone 4 陷阱最大宽度 :480px media queries

ios - Swift 如何使用自定义 UITableView 类将 UITableView 添加到 UIViewController

iphone - 如何在 iPhone 中捕获应用程序不活动时间

iphone - ios 将 float 属性添加到 UIButton 或派生

java - 如何使用启用了 Websphere SSL 的 MQ 配置 JBOSS 连接?

python - 在谷歌域上为 heroku 应用程序强制使用 HTTPS

ssl - 使用 SSL 证书查看站点时出现问题

c++ - 如何在openCV中规范化图像?

ios - AFNetworking 同时请求