2014-12-16 30 views
7

GELÖST (folgende Antwort)WSS/TLS websocket Verbindung mit Swift iOS

Ich verwende Starscream Bibliothek eine sichere websocket WSS in dem Testserver zu erstellen haben wir ein selbst signiertes Zertifikat und ich es finden unmöglich, die Verbindung herzustellen.

var socket = WebSocket(url: NSURL(scheme: "wss", host: "selfsignedserver.com", path: "/")!) 

Log

2014-12-16 10:38:10.260 pruebasignin[2135:363455] CFNetwork SSLHandshake failed (-9807) 
websocket is disconnected: The operation couldn’t be completed. (OSStatus error -9807.) 

und wenn ich versuche, gültig auch nicht zu einem Server-Zertifikat um eine Verbindung zu verbinden GELÖST

var socket = WebSocket(url: NSURL(scheme: "wss", host: "production.com", path: "/")!) 

Log

websocket is disconnected: Invalid HTTP upgrade 
+0

die Website muss auch HTTPS verwenden gehostete – Rafa

+0

@Rafa ja, mein Server benutzt https und wss, ich muss mein selbstsigniertes Zertifikat zulassen – Ch4vi

+0

Und https funktioniert, aber der Handshake nicht ... das ist komisch, das hatte ich noch nie, sorry kann ich nicht helfen. – Rafa

Antwort

2

löste ich das Problem von selbst signierten Zertifikaten ermöglicht die Bibliothek Starscream zu modifizieren.

if url.scheme == "wss" || url.scheme == "https" { 
     inputStream!.setProperty(NSStreamSocketSecurityLevelNegotiatedSSL, forKey: NSStreamSocketSecurityLevelKey) 
     outputStream!.setProperty(NSStreamSocketSecurityLevelNegotiatedSSL, forKey: NSStreamSocketSecurityLevelKey) 

     /* My code */ 
     var settings = Dictionary<NSObject, NSObject>() 
     settings[kCFStreamSSLValidatesCertificateChain] = NSNumber(bool:false) 
     settings[kCFStreamSSLPeerName] = kCFNull 

     CFReadStreamSetProperty(self.inputStream, kCFStreamPropertySSLSettings, settings) 
     CFWriteStreamSetProperty(self.outputStream, kCFStreamPropertySSLSettings, settings) 
     /* End my code*/ 

    } 
+0

Das Problem hier ist: Ein Man-in-the-Middle-Angriff ist einfach durchzuführen und Sie haben nichts von diesem Zertifikat gewonnen. Diese "Allow All and Do not Proof" -Mentalität scheint normal zu sein ... die Verwendung dieser in der Produktivität könnte Ihnen einige Probleme bereiten. Sie sollten nach einer Möglichkeit suchen, Ihr Zertifikat zu Ihrer Cert-Kette hinzuzufügen und einen Beweis dafür zu erstellen. – geo

+0

@geo Ja, Sie haben Recht, aber in meinem Fall ist es nur für einen Testserver, wir haben ein Zertifikat nur auf dem Produktionsserver. – Ch4vi

+0

Was verwenden Sie für die Serverseite? – uchuugaka

Verwandte Themen