OGeek|极客世界-中国程序员成长平台

标题: ios - GCDAsyncSocket 与 bonjour 服务 : does startTLS initiate TLS handshake [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 17:40
标题: ios - GCDAsyncSocket 与 bonjour 服务 : does startTLS initiate TLS handshake

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

[settings setObject:[NSNumber numberWithBool:YES]
             forKeyNSString *)kCFStreamSSLIsServer];
[settings setObject__bridge id _Nonnull)(certs)
             forKeyNSString *)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)
                 forKeyNSString *)kCFStreamSSLCertificates];
    [sock startTLS:settings];

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



Best Answer-推荐答案


我能够找出问题所在。这是wireshark的问题。在 wireshark 中,安全端口是 443,但对于 bonjour 服务,该端口是本地端口,所以我将 bonjour 服务的端口硬编码为 ex 12120 并发布了 bonjour 服务。

现在在wireshark Edit->Preferences->Protocol->HTTP 中,在此wireshark 开始通过TLSv1.2 显示正确的日志(例如客户端hello 和服务器hello 等)后,HTTP 将安全端口更改为12120。谢谢大家的支持。

关于ios - GCDAsyncSocket 与 bonjour 服务 : does startTLS initiate TLS handshake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39745736/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4