Wie setzt man SSL cipher bei der Verwendung von CFSocket / CFStream in Cocoa?

8

Ich musste kürzlich den CocoaHttpServer konfigurieren, den wir in unserer Anwendung erfolgreich verwenden, um HTTPS-Verbindungen zu verarbeiten von einer Client-Anwendung kommen (auf Android-Geräten ausgeführt). Das ist in Ordnung - es gibt einen umfangreichen Beispielcode, der dies ermöglicht, und wir konnten den sicheren Server ohne Probleme aktivieren.

In der Praxis haben wir unglaublich lange SSL-Verhandlungsphasen gesehen, während der Client seinen Handshake mit unserem Server durchführte - mehr als 70 Sekunden.

Durch eine lange Reihe von Suchen stellte ich fest, dass die Verzögerung auf der Berechnung der Diffie-Hellman-Parameter beruhte, die standardmäßig verwendet werden, wenn SSL in CFSocket aktiviert ist. In diesem Thread habe ich zum ersten Mal eine Antwort auf mein Problem gefunden.

Um zu vergleichen, was unser Windows-Server tat (mit einer weniger sicheren SSL-Verschlüsselung), musste ich die Verschlüsselung explizit auf dem Mac einstellen, was nicht einfach ist, wenn AsyncSocket als Wrapper für die Socket-Kommunikation verwendet wird.

>

Unser Windows-Server verwendete: TLS_RSA_WITH_RC4_128_MD5) (0x04) RC4 128 Bits MD5 RSA

Unser Macintosh-Server verwendete: TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x039) AES 256 Bit SHA-1 Ephemer Diffie-Hellman-Schlüsselaustausch mit RSA-Zertifikat

Der Unterschied in "Sicherheit" ist groß, aber wahrscheinlich nicht den Aufwand / die Berechnung / Verzögerung wert, die wir gesehen haben. Sicherheitstheater?

    
Brian Criscuolo 23.12.2009, 19:57
quelle

2 Antworten

4

Bitte beachten Sie, dass verschiedene Verschlüsselungsmethoden zur Auswahl stehen. Ich habe aus Gründen der Konsistenz die gleiche verwendet wie die Windows-Implementierung.

Mit Informationen aus einer anderen Frage , die ich oben erwähnt habe, habe ich herausgefunden, wie Stellen Sie die Chiffre für CFSocket so ein, dass sie dieselbe wie Windows verwendet, und der Code scheint jetzt ein bisschen besser zu sein - so wie es wirklich funktioniert! CFSocket stellt nicht direkt die SecureTransport-Unterstützung zur Verfügung, was diese Art von Hard erschwert, aber die Definition eines bestimmten Schlüssels macht es gut.

Für die Nachwelt ist hier der Code, den ich zu -sonSocketWillConnect hinzugefügt habe: in unserer HTTPConnection-Klasse:

%Vor%

...

%Vor%

Ich hoffe, dass dies jedem hilft, das gleiche Problem wie ich zu lösen - ich würde gerne mehr Code und Ratschläge geben, wenn nötig.

    
Brian Criscuolo 29.12.2009 21:32
quelle
0

Für das, was es wert ist, habe ich vor einer Woche einen Patch zu CocoaAsyncSocket beigesteuert Du hattest dieses Problem. Entschuldigung, dass ich deine Frage damals nicht bemerkt habe. : -)

    
Sedate Alien 25.07.2010 05:58
quelle