2016-09-28 2 views
2

enter image description here J'essaie de crypter la communication entre homologues en utilisant TLS négociation qui utilise la méthode startTLS de la bibliothèque GCDAsyncSocket. Les services Bonjour sont publiés par le serveur et le client se connecte au nom d'hôte publié. Une fois la connexion par socket établie, j'appelle le startTLS pour le serveur comme indiqué ci-dessous.GCDAsyncSocket avec bonjour Service: startTLS initie-t-il la négociation 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]; 

et le côté client ci-dessous est le paramètre que j'utilise.

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]; 

Une fois cette liaison établie entre le client et le serveur. Je déboguais le transfert de données entre ces deux à l'aide de wireshark. Dans le journal wireshark, cela indique que l'établissement de liaison est en cours avec le protocole TCP et non avec TLS. Je souhaite que la prise de contact se fasse via le protocole TLSv1.2. Joindre la capture d'écran pour le même. Tout le monde peut m'aider avec l'exemple de code.

+0

Vous devriez probablement lire à propos de SSL/TLS et de ce qu'est la prise de contact. Handshake est ce qui est nécessaire pour configurer le tunnel TLS. Il doit être fait sur le canal TCP ouvert, pas d'autre moyen. La seule façon d'établir une liaison sur TLS est de démarrer TLS dans un tunnel TLS déjà établi. – creker

+0

@creker Ok, la prise de contact ssl se fera uniquement via le protocole TCP. Pouvez-vous s'il vous plaît laissez-moi savoir quand le protocole TLSv1.2 viendra dans l'image. – Gyanendra

+0

après une poignée de main réussie – creker

Répondre

0

J'ai été capable de comprendre quel était le problème. C'était un problème avec wireshark. Dans le port blindé, le port sécurisé est le 443, mais pour le service de bonjour, le port est local, donc j'ai codé en dur le port pour les services bonjour pour l'ex 12120 et publié les services bonjour. Maintenant, dans wireshark Edit-> Preferences-> Protocol-> HTTP a changé le port sécurisé en 12120 après que wireshark ait commencé à afficher le journal approprié, par exemple le client bonjour et le serveur bonjour etc. sur TLSv1.2. Merci à tous pour le soutien.