SecTrustEvaluate() 是否在应用程序钥匙串中查找根证书?

2023-12-14

文档说:“如果验证叶证书所需的所有证书均未包含在信任管理对象中,则 SecTrustEvaluate 会在钥匙串搜索列表(请参阅 SecTrustSetKeychains)和系统的锚证书存储中(请参阅 SecTrustSetAnchorCertificates)搜索证书”。

然而,由于 SecTrustSetKeychains() 在 iOS 上不可用,因此尚不清楚该函数是否也会在应用程序的钥匙串中查找。


看来你已经有一段时间没有发帖了,所以我不确定你是否还需要答案。如果您的用例是“我受到了打击connection:didReceiveAuthenticationChallenge:,我想确保exact正在评估证书,那么您可以使用 iOS 内置信任方法或通过 Foundation API 做更多工作:(请注意,此处并未专门调用 SecTrustEvaulate,但可以很容易地添加它)

#import <Security/Security.h>
#import <CommonCrypto/CommonDigest.h>

从那里,您可以迭代完整的证书数组,并将其与挑战服务器信任参考的 SHA1 之类的内容进行比较:

// way #1 - iOS built-in ================================================ //
SecTrustRef trust = challenge.protectionSpace.serverTrust;
CFIndex cnt = SecTrustGetCertificateCount(trust);

// way #2 - build it in yourself from a file ============================ //
OSErr err;
NSString *path = [[NSBundle mainBundle] pathForResource:@"my.cert" 
                                                 ofType:@"der"];
NSData *derData = [NSData dataWithContentsOfFile:path];

SecCertificateRef myCert = 
    SecCertificateCreateWithData(NULL, (CFDataRef)derData);

CFMutableArrayRef array = CFArrayCreateMutable(NULL, 1, NULL);
CFArrayInsertValueAtIndex(array, 0, myCert);

err = SecTrustSetAnchorCertificates(trust, array);
if (err != errSecSuccess) {
    // do something smarter here, obviously, logging would be a start
    abort();
}
CFArrayRef certs = NULL;
err = SecTrustCopyCustomAnchorCertificates(trust, &certs);
if (err != errSecSuccess) {
    // again, better choices needed
    abort();
}
CFIndex cnt = CFArrayGetCount(certs);

// loop and compare 'em
for (int i = 0; i < cnt; i++) {
    SecCertificateRef cert = SecTrustGetCertificateAtIndex(trust, i);

    CFDataRef cdata = SecCertificateCopyData(cert);
    NSData *data = [[NSData alloc] initWithData:(NSData *)cdata];

    unsigned char digest_result[CC_SHA1_DIGEST_LENGTH];

    CC_SHA1(data.bytes, data.length, digest_result);
    // compare each byte with your in-code SHA1 bytes
    if (allBytesMatch) {
        NSURLCredential *cred = [NSURLCredential credentialForTrust:trust];
        [challenge.sender useCredential:cred 
             forAuthenticationChallenge:challenge];
    }
}
// don't forget to release & CFRelease all the alloc'ed stuff from above
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SecTrustEvaluate() 是否在应用程序钥匙串中查找根证书? 的相关文章

随机推荐

  • iOS:让应用程序在离开屏幕时终止

    我已经构建了一个简单的应用程序来激活硬件中的某些东西 这并不重要 现在我只希望应用程序在用户离开屏幕 切换应用程序 接到电话 按主页按钮等时完全终止 我对所有应用程序状态都感到困惑 我找不到合适的地方来处理它 我想我需要监听 要睡觉 事件并
  • 使用 Redshift 作为 Spring 批处理作业存储库以及 Redshift 中 SEQUENCE 的替代方案

    我的项目中的要求之一是将 Spring Batch 架构放置在 Amazon Redshift 数据库上 我计划从 schema postgresql sql 作为基线开始 因为 redshift 基于 postgres 查看 Spring
  • 如何用C语言制作分钟和秒计时器

    我正在努力用 c 语言制作一个可以计算分钟和秒的计时器 我试图通过将时间打印到控制台来测试它 但它似乎没有显示任何内容 我的代码看起来有什么问题吗 include
  • 您可以使用具有自签名证书的 Service Worker 吗?

    我有用于测试的开发人员服务器 他们拥有 SSL 自签名证书 使我们能够通过 HTTPS 测试 Web 应用程序 但会出现明显的警告 表明证书不可验证 没关系 但我有一个 Service Worker 抛出错误navigator servic
  • Adobe Socket 策略文件服务器问题

    有没有人能够成功实现一项服务来为 FlashPlayer 提供所需的套接字策略文件 我正在运行 Adob e 提供的服务的 Python 实现 http www adobe com devnet flashplayer articles s
  • Jquery 无法理解这个问题

    The alert i onclick 绑定线在 3 个 div 上运行 但所有这些在单击时都会提醒最后设置的值i 我希望我所做的事情是有意义的 这很难解释 它不是警报 1 2 或 3 而是警报 3 3 3 Updates bar prev
  • 是否可以检查所有 Java 8 流元素是否满足给定谓词之一?

    使用流 API 我可以轻松检查所有元素是否满足给定条件 使用allMatch e gt predicate e 方法 我还会检查是否满足多个条件中的任何一个allMatch e gt predicateA e predicateB e pr
  • 蛇吃掉一个方块后如何让更多的敌人出现

    所以我做了一个蛇游戏 但为了让它变得更难 我添加了一个用户必须避免的敌人 红色方块 但我想要它 所以当蛇吃掉它的一种食物时 另一个敌人会随机产生 一个例子是 如果他吃了 5 个食物 那么游戏中将会有 6 个敌人 所以我想知道如何让另一个敌人
  • QT下载大文件错误

    When I try to downloading file up to 50mb example no problem but with a big files give the following error void MainWind
  • kmalloc 中 GFP_USER 标志有什么用?

    据我了解 在GFP USER标志 在调用kmalloc 用于为用户空间分配内存 这是否意味着分配的页面位于用户可以访问的内核空间中 这些页面是否需要mmapp ed 在用户空间中或者用户可以直接访问该地址 如果他们需要mmapp那么有什么区
  • 什么会导致 DOMDocument.load 无法从可访问的 URL 加载 XML?

    doc new DOMDocument if doc gt load http foo com bar xml good else wtf happened I can wget http foo com bar xml从 PHP 代码运行
  • Net Core:Swashbuckle 自动将操作 ID 设置为控制器操作方法

    当为现有的 500 多个控制器和相应的方法创建 Angular API 服务代理时 我们试图覆盖 Swashbuckle Swagger IO CodeGen 命名约定 目前正在将 Net Core 3 API 与 Angular Type
  • 如何知道Android解码器MediaCodec.createDecoderByType(type)是硬件解码器还是软件解码器?

    有没有办法确定使用 MediaCodec createDecoderByType type 接收的解码器是硬件解码器还是软件解码器 没有真正正式的标志来指示编解码器是硬件编解码器还是软件编解码器 但实际上 您可以这样做 MediaCodec
  • 读取 servlet 中的 JSON 值[重复]

    这个问题在这里已经有答案了 我将 jQuery AJAX POST 发布到 servlet 数据采用 JSON 字符串的形式 我不确定数据是否已发布 另外 我想通过从 json 对象获取登录名和密码来验证登录名和密码 这是代码片段
  • 发送请求并获取响应

    我的服务器上运行着一个 php 代码 我称之为 Web 服务 它处理发送整数值中的数据 我怎样才能得到它 这是我的请求 url NSString requestURL NSString stringWithFormat u p platfo
  • Bot 框架模拟器不工作

    我上周开始学习机器人框架 我决定从返回您的输入及其字符数的默认机器人项目开始 但不幸的是 我无法在机器人模拟器中测试机器人应用程序 它不能只发送我的输入 每当我转发输入时 它都会显示 无法发送 我的端点网址是http localhost 3
  • MYSQL中日期字段的格式化方法

    All 我需要在 MYSQL 中检索某种特定格式的日期 例如 它应该返回月 年 10 2009 我的MYSQL版本是5 1 谢谢 斯里尼瓦桑 日期格式功能 DATE FORMAT col m Y
  • jQuery 不会解析带有名为 option 的节点的 xml

    我使用 jQuery 来解析一些 XML 如下所示 function enumOptions xml xml find animal each function alert this text enumOptions
  • Matplotlib - imshow twiny() 问题

    我试图在 matplotlib imshow 图中有两个相互依赖的 x 轴 我将底部 x 轴作为半径的平方 而我希望顶部仅作为半径 到目前为止我已经尝试过 ax8 ax7 twiny ax8 sharex ax7 fmtr FuncForm
  • SecTrustEvaluate() 是否在应用程序钥匙串中查找根证书?

    文档说 如果验证叶证书所需的所有证书均未包含在信任管理对象中 则 SecTrustEvaluate 会在钥匙串搜索列表 请参阅 SecTrustSetKeychains 和系统的锚证书存储中 请参阅 SecTrustSetAnchorCer