TrustKit 3.0.4

TrustKit 3.0.4

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最后发布2024年3月

Alban DiquetEric CastroAmos Joshua 维护。



TrustKit 3.0.4

  • Alban Diquet、Angela Chow 和 Eric Castro

TrustKit

Build Status Carthage compatible Version Status Platform License MIT Gitter chat

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

如果您需要在您的 Android 应用程序中启用 SSL 签名/报告,我们还在 https://github.com/datatheorem/TrustKit-Android 发布了 TrustKit for Android

概述

TrustKit 提供以下功能

  • 简单的 API,用于配置 SSL 公钥固定策略并在应用程序内执行它。策略设置基于HTTP 公钥固定规范
  • 通过对证书的主题公钥信息进行固定,实现了合理的实现,而不是证书本身或公钥位
  • 报告机制,通知服务器有关在应用程序内发生的公钥固定验证失败,当检测到意外证书链时。这与 HPKP 规范中描述的 report-uri 指令类似。报告机制也可以通过利用 TrustKit 发送的公钥验证通知来自定义应用程序中的报告。
  • 通过交换App的NSURLConnectionNSURLSession代理来开启自动加载数据功能,从而将验证功能添加到App的HTTPS连接中;这样可以部署TrustKit而不需要修改App的源代码。

入门

示例用法

在App中部署SSL锁定需要初始化TrustKit并配置锁定策略(域名、Subject Public Key Info散列以及附加设置)。

可以在这App的Info.plist中配置策略。

Info.plist policy

也可以通过程序代码设置锁定策略

    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实例,并可用于在App的网络代理中执行SSL锁定验证。例如在一个NSURLSessionDelegate中

- (void)URLSession:(NSURLSession *)session 
              task:(NSURLSessionTask *)task 
didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge 
 completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler {
{
    TSKPinningValidator *pinningValidator = [[TrustKit sharedInstance] pinningValidator];
    // Pass the authentication challenge to the validator; if the validation fails, the connection will be blocked
    if (![pinningValidator handleChallenge:challenge completionHandler:completionHandler])
    {
        // TrustKit did not handle this challenge: perhaps it was not for server trust
        // or the domain was not pinned. Fall back to the default behavior
        completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
    }
}

有关更多信息,请参阅入门指南

致谢

TrustKit是由Data Theorem和雅虎移动团队共同协作的结果。有关详细信息,请参阅<码>AUTHORS。

许可协议

TrustKit是以MIT许可证发布的。有关详细信息,请参阅LICENSE文件。