2016-09-28 5 views
2

enter image description here Я пытаюсь зашифровать одноранговой связи с использованием TLS рукопожатия, который использует startTLS метод GCDAsyncSocket библиотеки. Сервисы Bonjour публикуются сервером, а клиент соединяется с опубликованным именем хоста. После установления соединения сокета я вызываю startTLS для сервера, как показано ниже.GCDAsyncSocket с Bonjour Service: делает 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

Я смог выяснить, в чем проблема. Это была проблема с wirehark. В wirehark безопасный порт составляет 443, но для обслуживания bonjour порт является локальным, поэтому я жестко закодировал порт для bonjour-сервисов для ex 12120 и опубликовал Bonjour-сервисы.

Теперь в wirehark Edit-> Preferences-> Protocol-> HTTP изменил безопасный порт на 12120 после того, как этот wirehark начал показывать правильный журнал, такой как приветствие клиента и приветствие сервера и т. Д. По TLSv1.2. Спасибо всем за поддержку.

Смежные вопросы