Project Icon

TrustKit

iOS和macOS应用的开源SSL公钥固定框架

TrustKit是一个为iOS和macOS应用提供SSL公钥固定功能的开源框架。它支持Swift和Objective-C,提供简单的API配置、安全实现、自定义报告和自动固定功能。开发者可利用TrustKit轻松部署SSL公钥固定,增强应用安全性。框架适用于iOS 12+和macOS 10.13+系统。

TrustKit

构建状态 兼容Carthage 版本状态 平台 MIT许可证 Gitter聊天

TrustKit是一个开源框架,可以轻松地在任何iOS 12+、macOS 10.13+、tvOS 12+或watchOS 4+应用中部署SSL公钥固定和报告功能;它支持Swift和Objective-C应用。

如果你需要在Android应用中使用SSL固定/报告功能,我们还发布了TrustKit for Android,地址为https://github.com/datatheorem/TrustKit-Android

概述

TrustKit提供以下功能:

  • 简单的API,用于配置SSL固定策略并在应用中强制执行。策略设置主要基于HTTP公钥固定规范
  • 通过固定证书的主体公钥信息来实现合理的实现,而不是固定证书本身或公钥位
  • 报告机制,用于在检测到意外证书链时通知服务器应用内发生的固定验证失败。这类似于HPKP规范中描述的_report-uri_指令。通过利用TrustKit发送的固定验证通知,还可以在应用内自定义报告机制。
  • 通过调整应用的_NSURLConnection_和_NSURLSession_代理来实现自动固定功能,从而自动为应用的HTTPS连接添加固定验证;这允许在不修改应用源代码的情况下部署TrustKit

入门指南

  • 阅读[入门指南][getting-started]。
  • 查看[API文档][api-doc]。
  • TrustKit最初在[2015年美国黑帽大会][bh2015-pdf]上发布,并在[PayPal的工程博客][paypal-post]上也有介绍。

使用示例

在应用中部署SSL固定需要使用固定策略(域名、主体公钥信息哈希和其他设置)初始化TrustKit

策略可以在应用的Info.plist中配置: Info.plist策略

另外,也可以通过编程方式设置固定策略:

    NSDictionary *trustKitConfig =
  @{
    kTSKSwizzleNetworkDelegates: @NO,
    kTSKPinnedDomains : @{
            @"www.datatheorem.com" : @{
                    kTSKExpirationDate: @"2017-12-01",
                    kTSKPublicKeyHashes : @[
                            @"HXXQgxueCIU5TTLHob/bPbwcKOKw6DkfsTWYHbxbqTY=",
                            @"0SDf3cRToyZJaMsoS17oF72VMavLxj/N7WBNasNuiR8="
                            ],
                    kTSKEnforcePinning : @NO,
                    },
            @"yahoo.com" : @{
                    kTSKPublicKeyHashes : @[
                            @"TQEtdMbmwFgYUifM4LDF+xgEtd0z69mPGmkp014d6ZY=",
                            @"rFjc3wG7lTZe43zeYTvPq8k4xdDEutCmIhI5dn4oCeE=",
                            ],
                    kTSKIncludeSubdomains : @YES
                    }
            }};
    
    [TrustKit initSharedInstanceWithConfiguration:trustKitConfig];

在Swift应用中也可以通过编程方式设置策略:

        let trustKitConfig = [
            kTSKSwizzleNetworkDelegates: false,
            kTSKPinnedDomains: [
                "yahoo.com": [
                    kTSKExpirationDate: "2017-12-01",
                    kTSKPublicKeyHashes: [
                        "JbQbUG5JMJUoI6brnx0x3vZF6jilxsapbXGVfjhN8Fg=",
                        "WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18="
                    ],]]] as [String : Any]
        
        TrustKit.initSharedInstance(withConfiguration:trustKitConfig)

初始化TrustKit后,可以从TrustKit单例中获取一个TSKPinningValidator实例,并在应用的网络代理中使用它来执行SSL固定验证。例如在NSURLSessionDelegate中:

- (void)URLSession:(NSURLSession *)session 
              task:(NSURLSessionTask *)task 
didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge 
 completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler {
{
    TSKPinningValidator *pinningValidator = [[TrustKit sharedInstance] pinningValidator];
    // 将认证挑战传递给验证器;如果验证失败,连接将被阻止
    if (![pinningValidator handleChallenge:challenge completionHandler:completionHandler])
    {
        // TrustKit没有处理这个挑战:可能不是服务器信任
        // 或者域名没有被固定。回退到默认行为
        completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
    }
}

更多信息,请参阅[入门指南][getting-started]。

致谢

TrustKit是Data Theorem和Yahoo移动团队的联合努力成果。详情请参阅AUTHORS文件。

许可证

TrustKit基于MIT许可证发布。详情请参阅LICENSE文件。 [入门指南]: https://github.com/datatheorem/TrustKit/blob/master/docs/getting-started.md [BH2015-PDF]: https://github.com/datatheorem/TrustKit/blob/master/docs/TrustKit-BH2015.pdf [BH2015会议]: https://www.blackhat.com/us-15/briefings.html#trustkit-code-injection-on-ios-8-for-the-greater-good [API文档]: https://datatheorem.github.io/TrustKit/documentation [iOS9文章]: https://datatheorem.github.io/ios/2015/10/17/trustkit-ios-9-shared-cache/ [PayPal文章]: https://www.paypal-engineering.com/2015/10/14/key-pinning-in-mobile-applications/

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号