5

我希望能够以编程方式查看 TLS 握手信息,并能够执行以下操作:

NSLog(@"Client Hello");
//...
NSLog(@"Server Hello");

有一篇很好的博客文章更详细地显示了所说的握手信息(或参见下面的 wireshark 捕获图像)。

我已经在使用ASIHTTPRequest,所以下面的代码示例取自该代码库。但是,如果可以记录 TLS 握手信息,我会认真考虑切换到更现代的AFNetworking库。我相信 AFNetworking 使用不同的对象(即 NSURLConnection、NSURLCredential)。

我正在向流中添加一个 SecIdentityRef(查看更多代码上下文)。

CFReadStreamSetProperty((CFReadStreamRef)[self readStream], kCFStreamPropertySSLSettings, sslProperties);

我列出了以下网络事件:

static const CFOptionFlags kNetworkEvents = kCFStreamEventOpenCompleted | kCFStreamEventCanAcceptBytes | kCFStreamEventHasBytesAvailable | kCFStreamEventEndEncountered | kCFStreamEventErrorOccurred;

此事件在文档的CFStream部分中进行了描述。

这是打开流的方式(查看更多代码上下文):

CFStreamClientContext ctxt = {0, self, NULL, NULL, NULL};
if (CFReadStreamSetClient((CFReadStreamRef)[self readStream], kNetworkEvents, ReadStreamClientCallBack, &ctxt)) {
    if (CFReadStreamOpen((CFReadStreamRef)[self readStream])) {
        streamSuccessfullyOpened = YES;
    }
}

当调用回调 ( ReadStreamClientCallBack) 来处理事件时,使用 switch 语句:

switch (type) {
    case kCFStreamEventHasBytesAvailable:
        //...
        break;

    case kCFStreamEventEndEncountered:
        //...
        break;

    //other events here...

    default:
        break;
}

我相信握手发生在:kCFStreamEventOpenCompletedkCFStreamEventHasBytesAvailable.

按照此处的说明,我能够使用Wireshark捕获和分析来自/发往 iPhone 和服务器的数据包。

Wireshark 抓图

有没有我可以调用的 API 或可以用来在设备上获取类似信息的库?

4

0 回答 0