带有bonjour服务的GCDAsyncSocket:startTLS是否启动TLS握手

时间:2016-09-28 11:08:12

标签: ios objective-c tls1.2 bonjour gcdasyncsocket

enter image description here我尝试使用TLS握手加密对等通信,该握手使用startTLSGCDAsyncSocket方法。 Bonjour服务由服务器发布,客户端连接到已发布的主机名。建立套接字连接后,我正在为服务器调用startTLS,如下所示。

[settings setObject:[NSNumber numberWithBool:YES]
             forKey:(NSString *)kCFStreamSSLIsServer];
[settings setObject:(__bridge id _Nonnull)(certs)
             forKey:(NSString *)kCFStreamSSLCertificates];
CFRelease(certs);
settings[GCDAsyncSocketSSLProtocolVersionMin] = [NSNumber numberWithInteger:8];

[connectedSockets addObject:newSocket];
[newSocket startTLS:settings];

以下客户端是我正在使用的设置。

    NSMutableDictionary *settings = [[NSMutableDictionary alloc] init];
    settings[GCDAsyncSocketSSLProtocolVersionMin] = [NSNumber numberWithInteger:4];
    settings[GCDAsyncSocketSSLProtocolVersionMax] = [NSNumber numberWithInteger:8];
    [settings setObject:[NSNumber numberWithBool:YES]
                 forKey:GCDAsyncSocketManuallyEvaluateTrust];
    [settings setObject:(__bridge id _Nonnull)(certs)
                 forKey:(NSString *)kCFStreamSSLCertificates];
    [sock startTLS:settings];

在客户端和服务器之间开始此握手之后。 我在wireshark的帮助下调试了这两者之间的数据传输。 在wireshark日志中,它显示使用TCP协议而不是TLS进行握手。 我希望握手应该发生在TLSv1.2协议上。附加屏幕截图相同。 任何机构都可以帮我提供示例代码。

1 个答案:

答案 0 :(得分:0)

我能够弄清楚问题是什么。这是wireshark的问题。在wireshark,安全端口是443,但是对于bonjour服务,端口是本地的,所以我硬编码端口为ex 12120提供bonjour服务并发布了bonjour服务。

现在在wireshark编辑 - >偏好设置 - >协议 - >在此Wirehark开始通过TLSv1.2显示正确的日志(例如客户端问候语和服务器问候语等)之后,HTTP将安全端口更改为12120。谢谢大家的支持。