带有 bonjour 服务的 GCDAsyncSocket:startTLS 是否启动 TLS 握手
GCDAsyncSocket with bonjour Service: does startTLS initiate TLS handshake
我尝试使用 TLS
握手加密点对点通信,它使用 GCDAsyncSocket
库的 startTLS
方法。
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 协议进行。附上相同的屏幕截图。
任何人都可以帮助我提供示例代码。
我能够找出问题所在。这是wireshark的问题。在 wireshark 中,安全端口是 443,但对于 bonjour 服务,端口是本地的,所以我硬编码了 ex 12120 的 bonjour 服务端口并发布了 bonjour 服务。
现在在 wireshark Edit->Preferences->Protocol->HTTP 中将安全端口更改为 12120,此 wireshark 开始通过 TLSv1.2 显示正确的日志,例如客户端 hello 和服务器 hello 等。谢谢大家的支持。
TLS
握手加密点对点通信,它使用 GCDAsyncSocket
库的 startTLS
方法。
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 协议进行。附上相同的屏幕截图。
任何人都可以帮助我提供示例代码。
我能够找出问题所在。这是wireshark的问题。在 wireshark 中,安全端口是 443,但对于 bonjour 服务,端口是本地的,所以我硬编码了 ex 12120 的 bonjour 服务端口并发布了 bonjour 服务。
现在在 wireshark Edit->Preferences->Protocol->HTTP 中将安全端口更改为 12120,此 wireshark 开始通过 TLSv1.2 显示正确的日志,例如客户端 hello 和服务器 hello 等。谢谢大家的支持。