首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >支持TLS的CFStream

支持TLS的CFStream
EN

Stack Overflow用户
提问于 2017-10-17 15:46:43
回答 1查看 669关注 0票数 1

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

EN

回答 1

Stack Overflow用户

发布于 2017-10-18 05:09:03

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

代码语言:javascript
复制
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()
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46785057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档