2016-09-28 73 views
2

enter image description here我試圖使用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協議上。附加相同的屏幕截圖。 任何機構都可以幫助我處理示例代碼。

+0

您應該閱讀關於SSL/TLS和什麼是握手。握手是設置TLS隧道所需的。它必須通過開放的TCP通道完成,沒有其他辦法。通過TLS握手的唯一方法是在已建立的TLS隧道內啓動TLS。 – creker

+0

@creker好了,所以ssl握手只會發生在TCP協議上。你可以讓我知道什麼時候TLSv1.2協議會出現在圖片中。 – Gyanendra

+0

成功握手後 – creker

回答

0

我能弄清楚是什麼問題。這是wireshark的問題。在wireshark中,安全端口是443,但是對於bonjour服務,端口是本地的,所以我對ex 12120的bonjour服務端口進行了硬編碼併發布了bonjour服務。

現在在wireshark Edit-> Preferences-> Protocol-> HTTP在這個wireshark開始在TLSv1.2上顯示正確的日誌(如客戶端hello和服務器hello等)後將安全端口更改爲12120。謝謝大家的支持。