我試圖使用
TLS
加密對等通信使用startTLS
方法GCDAsyncSocket
庫。 Bonjour服務由服務器發佈,客戶端連接到發佈的主機名。在套接字連接建立之後,我正在爲服務器調用startTLS
,如下所示。Bonjour服務的GCDAsyncSocket服務:是否startTLS發起TLS握手
[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
@creker好了,所以ssl握手只會發生在TCP協議上。你可以讓我知道什麼時候TLSv1.2協議會出現在圖片中。 – Gyanendra
成功握手後 – creker