我们如何告诉CFStream使用一组锚证书?

我知道我们可以使用SecTrustSetAnchorCertificates()给出一个SecTrustRef。 但是用CFStreams,我们只能在握手后才能得到信任对象。 一种解决方法似乎是使用kCFStreamSSLValidatesCertificateChain属性禁用CFStream上的证书链validation,然后使用kCFStreamPropertySSLPeerCertificates获取对等证书,从这些证书创build信任并自行评估信任。

但是,如果我们可以告诉CFStream使用一系列证书作为锚点,那将会更加清洁。 我是否希望太多?

来自Apple Devforums的eskimo1回答如下:

首先,使用kCFStreamSSLValidatesCertificateChain禁用自动信任评估。

其次,一旦数据stream启动并运行(我通常在我的'可以接受字节'或'有可用字节'的消息处理中执行此操作),使用kCFStreamPropertySSLPeerTrust从stream中获取SecTrust对象,并为自己评估该信任。 如果信任评估失败,请拆除信息stream。