gpt4 book ai didi

iphone - 在 iOS 上使用 CFStream 套接字接受不受信任的 SSL 服务器证书

转载 作者:可可西里 更新时间:2023-11-01 04:36:28 29 4
gpt4 key购买 nike

我需要打开一个 CFStream 套接字连接到具有不受信任的 CA 根的服务器。我有服务器的证书,我可以从中创建一个 SecCertificateRef 结构。问题是如何设置流的属性。

我认为我应该将 kCFStreamPropertySSLSettings 属性设置为 CFDictionary,后者又包含一个 kCFStreamSSLCertificates 键。根据文档,此 key 应包含“SecCertificateRefs 的 CFArray,但数组中的第一个元素除外,它是 SecIdentityRef”。现在我可以从应用程序随附的服务器证书创建 SecCertificateRef,但如何获取 SecIdentityRef?我猜它应该是客户端身份,但我现在绝对不想要客户端身份验证。而且我找不到如何仅使用服务器证书来提供 CFStream 的方法。

请注意,我不想将不受信任的证书添加到钥匙串(keychain),也不想在设置中禁用 kCFStreamSSLValidatesCertificateChain。仅当它基于从磁盘加载的我自己的服务器证书数据时,我才需要接受服务器身份验证,并且仅在此 CFStream 上。

最佳答案

我没有直接回答你的问题,但可能有一些指导方针:

  1. 为什么需要使用 CFStream API 而不是更直观的 NSURLConnection
    从我在文档中找到的内容来看,似乎并非所有适用于 Mac OS X 的东西,关于 CFStream API,都适用于 iOS。所以想一想,看看能不能换成NSURLConnection :-)

  2. 对于 NSURLConnection,您可以使用 NSURLConnectionDelegate 方法获取 SSL 质询并自行验证证书。您可以查看 wsdl2objc 项目,我在其中实现了这些功能:

  3. 现在谈谈你的问题:-)
    我看不到如何在 kCFStreamPropertySSLSettings 中设置自定义(不受信任的)CA。我不确定它是否可以通过使用 kCFStreamSSLCertificates 来完成,因为它旨在用于设置客户端证书(因此需要 SecIdentityRef 在索引 0 上,基本上提供私钥)。

  4. 当您说您不想将证书添加到钥匙串(keychain)时,您是指手动还是以编程方式?我猜您不喜欢您的应用程序的用户必须手动执行此操作,但您可以使用Security API 以编程方式导入证书。在这种情况下,您的证书将导入到仅适用于您的应用程序的沙盒钥匙串(keychain)中。 (同样,不确定这是否有效但值得一试)

在我的应用程序中,我使用 NSURLConnectionDelegate 手动验证不受信任的证书。

问候,
佩斯

关于iphone - 在 iOS 上使用 CFStream 套接字接受不受信任的 SSL 服务器证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9618886/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com