我希望能够以编程方式查看 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;
}
我相信握手发生在:kCFStreamEventOpenCompleted
和kCFStreamEventHasBytesAvailable
.
按照此处的说明,我能够使用Wireshark捕获和分析来自/发往 iPhone 和服务器的数据包。
有没有我可以调用的 API 或可以用来在设备上获取类似信息的库?