首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CFStream套接字在iOS上接受不可信SSL服务器证书

使用CFStream套接字在iOS上接受不可信SSL服务器证书
EN

Stack Overflow用户
提问于 2012-03-08 14:07:35
回答 2查看 4K关注 0票数 5

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

我认为我应该将kCFStreamPropertySSLSettings属性设置为包含kCFStreamSSLCertificates键的CFDictionary。根据文档,这个键应该包含一个“CFArray of SecCertificateRefs,除了数组中的第一个元素,它是一个SecIdentityRef”。现在我可以从服务器的证书中创建SecCertificateRef,我将随应用程序一起发布该证书,但是如何获得SecIdentityRef呢?我想应该是客户端身份,但我现在绝对不想要客户端身份验证。我也找不到一种方法,只给CFStream提供服务器证书。

注意,我不想将不受信任的证书添加到密钥链中,也不想在设置中禁用kCFStreamSSLValidatesCertificateChain。如果服务器身份验证是基于从磁盘加载的自己的服务器证书数据,并且仅基于此CFStream,则需要接受服务器身份验证。

EN

回答 2

Stack Overflow用户

发布于 2012-03-16 12:07:10

我对你的问题没有直接的答案,但也许没有什么指导方针:

为什么需要使用NSURLConnection API而不是更直观的

根据我在文档中可以找到的内容,它与Mac中可用的所有东西(关于CFStream API )都不是iOS可用的东西一样。因此,考虑一下,看看是否可以切换到NSURLConnection :-)

  • For NSURLConnection,您可以使用

方法来获得SSL挑战并自己验证证书。您可以检查wsdl2objc项目,我在这里实现了以下特性:

代码语言:javascript
复制
- The project: [http://code.google.com/p/wsdl2objc/](http://code.google.com/p/wsdl2objc/)
- Some guidelines on how to get the certificate references: [http://code.google.com/p/wsdl2objc/wiki/AdvancedOptions](http://code.google.com/p/wsdl2objc/wiki/AdvancedOptions)

  1. 现在问你的问题:-)

我不知道如何在kCFStreamPropertySSLSettings.中设置自定义(不可信) CA我不确定是否可以通过使用kCFStreamSSLCertificates来实现,因为它用于设置客户端证书(因此需要在索引0上设置SecIdentityRef,这基本上提供了私钥)。当您说不想将证书添加到密钥链时,

  • 是指手动还是编程?我想您不喜欢您的应用程序的用户不得不手工操作,但是您可以使用Security 编程导入证书。在这种情况下,您的证书将在沙箱密钥链中导入,该密钥链仅适用于您的应用程序。(同样,不确定这是否有效,但值得一试)

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

致以敬意,

皮斯

票数 3
EN

Stack Overflow用户

发布于 2013-08-21 16:20:59

基本上你必须:

使用kCFStreamSSLValidatesCertificateChain

  • get禁用默认信任评估--信任对象(kCFStreamPropertySSLPeerTrust),一旦连接到流(但在发送任何数据(例如,在kCFStreamEventCanAcceptByteskCFStreamEventHasBytesAvailable事件上)之前),将自签名根证书设置为该信任object

  • optionally,的受信任锚,您可以向信任对象添加自定义SSL策略(例如,主机名与证书CN不匹配),但是,如果这样做,那么在设置受信任的锚之前做这件事是很重要的,或者您可以获得result

  • evaluate,信任对象(SecTrustEvaluate),并检查结果是kSecTrustResultProceed还是kSecTrustResultUnspecified
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9618886

复制
相关文章

相似问题

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