CertificatePinner

CertificatePinner 是一个用 Swift 编写的 SSL pinning 辅助库。

功能

安装

CertificatePinner 库可以通过 SPM、Cocoapods 和 Carthage 依赖管理器进行安装。

SPM

Swift Package Manager 是一个用于自动化 Swift 代码分发的工具,并已集成到 swift 编译器中。

一旦你设置好你的 Swift 包,添加 CertificatePinner 作为依赖项就像将其添加到你的 Package.swift 文件的 dependencies 值中一样简单。

dependencies: [
    .package(url: "https://github.com/micho233/certificate-pinner.git", .upToNextMajor(from: "1.0.0"))
]

Cocoapods

CocoaPods 是 Cocoa 项目的依赖管理器。有关使用和安装说明,请访问他们的网站。要使用 CocoaPods 将 CertificatePinner 集成到你的 Xcode 项目中,请在你的 Podfile 中指定它。

pod 'CertificatePinner'

Carthage

Carthage 是一个去中心化的依赖管理器,它可以构建你的依赖项并为你提供二进制框架。要使用 Carthage 将 CertificatePinner 集成到你的 Xcode 项目中,请在你的 Cartfile 中指定它。

github "micho233/certificate-pinner"

用法

CertificatePinner 提供了一种优雅的证书 pinning 方法(目前仅支持公钥 pinning),以防止中间人攻击。

与 URLSession 一起使用

CertificatePinner 类可以在你的网络类中的任何位置声明,或者由数据源提供。

var pinner = CertificatePinner(pins: ["PublicKeyhash", "AnyOtherPublicKeyHash"])

iOS13+

func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge) async -> (URLSession.AuthChallengeDisposition, URLCredential?) {
    return await pinner.checkCertificateValidity(for: challenge)
}

iOS9+

func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
    pinner.checkCertificateValidity(for: challenge, completion: completionHandler)
}