我们如何告诉 CFStream 使用一组锚证书?
我知道我们可以使用 SecTrustSetAnchorCertificates() 给定 SecTrustRef。但使用CFStreams,我们只有在握手后才能获得信任对象。一种解决方法似乎是使用 kCFStreamSSLValidatesCertificateChain 属性禁用 CFStream 上的证书链验证,然后使用 kCFStreamPropertySSLPeerCertificates 获取对等证书,从这些证书创建信任并自行评估信任。
但如果我们可以告诉 CFStream 使用一组证书作为锚点,那么事情会干净很多。我是不是希望太多了?
I know we can use SecTrustSetAnchorCertificates() given a SecTrustRef. But with CFStreams, we can get the trust object only after the hand shake. One workaround seems to be to disable certificate chain verification on the CFStream using the kCFStreamSSLValidatesCertificateChain property and then get the peer certificates using kCFStreamPropertySSLPeerCertificates, create a trust from those certificates and evaluate the trust ourselves.
But it would be a lot cleaner if we could just tell CFStream to use an array of certs as anchor. Am I hoping for too much?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Apple Devforums 的 eskimo1 如此回答:
首先,使用 kCFStreamSSLValidatesCertificateChain 禁用自动信任评估。
其次,一旦流启动并运行(我通常在“可以接受字节”或“有可用字节”消息处理中执行此操作),使用 kCFStreamPropertySSLPeerTrust 从流中获取 SecTrust 对象并自行评估该信任。如果信任评估失败,则拆除该流。
eskimo1 from Apple Devforums answered this so:
First, disable automatic trust evaluation using kCFStreamSSLValidatesCertificateChain.
Second, once the stream is up and running (I typically do this in my 'can accept bytes' or 'has bytes available' message handling), get the SecTrust object from the stream using kCFStreamPropertySSLPeerTrust and evaluate that trust for yourself. If the trust evaluation fails, tear down the stream.