0

SNI で TLS 接続をセットアップしようとしています。問題は、最初のプロパティ設定呼び出しが受け入れられたことを示す 1 を返すことです。次の 2 つは 0 を返します。これは、通過しなかったことを意味します。理由は何でしょうか?

ある時点で、信頼できるように独自の証明書を追加する必要がありますが、私が理解している限り、それはストリームを開いた後に行われるため、ここでは何の原因にもなりません。

また、kCFStreamSocketSecurityLevelNegotiatedSSL直接選択する定数がないため、tls1.2 はサポートされますか?

    var tempInputStream: Unmanaged<CFReadStream>?
    var tempOutputStream: Unmanaged<CFWriteStream>?

    CFStreamCreatePairWithSocketToHost(nil, address as CFStringRef, port, &tempInputStream, &tempOutputStream)

    let cfInputStream: CFReadStream = tempInputStream!.takeRetainedValue()
    let cfOutputStream: CFWriteStream = tempOutputStream!.takeRetainedValue()

//setting properties
    print(CFReadStreamSetProperty(cfInputStream, kCFStreamPropertySocketSecurityLevel, kCFStreamSocketSecurityLevelNegotiatedSSL))
    print(CFReadStreamSetProperty(cfInputStream, kCFStreamSSLValidatesCertificateChain, kCFBooleanFalse))
    print(CFReadStreamSetProperty(cfInputStream, kCFStreamSSLPeerName, "peer.address"))


    let inputStream: NSInputStream = cfInputStream
    let outputStream: NSOutputStream = cfOutputStream

    inputStream.delegate = self
    inputStream.delegate = self

    inputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
    outputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)

    inputStream.open()
    outputStream.open()
4

1 に答える 1

1

kCFStreamSSLValidatesCertificateChainストリーム プロパティではありkCFStreamSSLPeerNameません。これらは SSL 設定プロパティです。それらをすべて辞書にまとめて、次のように割り当てる必要がありますkCFStreamPropertySSLSettings

let ssl = [
    String(kCFStreamSSLValidatesCertificateChain): kCFBooleanFalse, // You an probably use "false" here
    String(kCFStreamSSLPeerName): "peer.address"
]

print(CFReadStreamSetProperty(cfInputStream, kCFStreamPropertySSLSettings, ssl))
于 2015-07-16T13:04:30.567 に答える