【问题标题】:CFStream with TLS带有 TLS 的 CFStream
【发布时间】:2017-10-17 07:46:43
【问题描述】:

是否可以使用 TLS 1.2 在CFStream 上进行通信?如果是,最好的方法是什么?设置SSLContext 还是设置CFReadStreamSetProperty?不幸的是,我找不到任何例子。

【问题讨论】:

    标签: swift cfstream cfreadstream sslcontext


    【解决方案1】:

    这是我的代码,如果有人也在搜索这个:

    var readStream: Unmanaged<CFReadStream>?
    var writeStream: Unmanaged<CFWriteStream>?
    var inputStream: InputStream!
    var outputStream: OutputStream!
    
    func connectToServer(host: String, port: Int, ssl: Bool=true) throws {
        self.ssl = ssl
    
        // Create StreamPair
        CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, host as CFString, UInt32(port), &readStream, &writeStream)
    
        // CFStreamCreatePairWithSocketToHost creates unmanaged CFReadStreams. So let's take the retained value
        // we have to release those values!
        inputStream = readStream!.takeRetainedValue()
        outputStream = writeStream!.takeRetainedValue()
    
        if ssl == true {
            let dict = [
                kCFStreamSSLValidatesCertificateChain: kCFBooleanFalse,     // allow self-signed certificate
                kCFStreamSSLLevel: "kCFStreamSocketSecurityLevelTLSv1_2"    // don't understand, why there isn't a constant for version 1.2
                ] as CFDictionary
    
            let sslSetRead = CFReadStreamSetProperty(inputStream, CFStreamPropertyKey(kCFStreamPropertySSLSettings), dict)
            let sslSetWrite = CFWriteStreamSetProperty(outputStream, CFStreamPropertyKey(kCFStreamPropertySSLSettings), dict)
    
            if sslSetRead == false || sslSetWrite == false {
                throw ConnectionError.sslConfigurationFailed
            }
        }
    
        // set the delegate of the streams
        inputStream.delegate = self
        outputStream.delegate = self
    
        // schedule the streams for the runLoop
        inputStream.schedule(in: .current, forMode: .commonModes)
        outputStream.schedule(in: .current, forMode: .commonModes)
    
        // open the streams
        inputStream.open()
        outputStream.open()
    }
    

    【讨论】:

    • 你有没有让用户得到响应的委托方法。
    猜你喜欢
    • 2019-05-14
    • 2021-03-20
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    相关资源
    最近更新 更多