与Swift iOS的WSS/TLS websocket连接

Ch4*_*4vi 8 ssl wss websocket ios swift

已解决(以下回答)

我正在使用Starscream库在测试服务器中创建一个安全的websocket wss,我们有一个自签名证书,我发现无法建立连接.

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

日志

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.)
Run Code Online (Sandbox Code Playgroud)

当我尝试连接到服务器证书时,有效也无法连接到 SOLVED

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

日志

websocket is disconnected: Invalid HTTP upgrade
Run Code Online (Sandbox Code Playgroud)

Ch4*_*4vi 2

我通过允许红蜘蛛修改库的自签名证书解决了这个问题。必须在 arcivo WebSocket.swift 中添加以下代码:

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*/

    }
Run Code Online (Sandbox Code Playgroud)