【发布时间】:2017-02-06 07:54:21
【问题描述】:
我尝试使用TLS 握手加密点对点通信,该握手使用startTLS 库的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 协议进行。附上相同的屏幕截图。
任何机构都可以帮助我提供示例代码。
【问题讨论】:
-
您可能应该阅读 SSL/TLS 以及什么是握手。握手是设置 TLS 隧道所必需的。它必须通过开放的 TCP 通道完成,没有其他方法可以解决。通过 TLS 进行握手的唯一方法是在已建立的 TLS 隧道内启动 TLS。
-
@creker 好的,所以 ssl 握手只会通过 TCP 协议发生。你能告诉我什么时候 TLSv1.2 协议会出现。
-
握手成功后
-
@creker 握手后感谢,如果我将任何数据写入 Wireshark 中的套接字,它应该显示 TLSv1.2?即使我在成功握手后将一些数据写入套接字,它也仅显示为 TCP 协议。
标签: ios objective-c tls1.2 bonjour gcdasyncsocket