【问题标题】:Get SecKey from SecCertificate pre iOS 10.3从 iOS 10.3 之前的 SecCertificate 获取 SecKey
【发布时间】:2019-11-11 22:50:01
【问题描述】:

我需要从证书中获取公钥

我已经找到了在 iOS 12+ 和 iOS 10.3+ 上执行此操作的方法,但如何在 iOS 10.0+ 上执行此操作?

    func publicKey(for certificate: SecCertificate) -> SecKey? {
        if #available(iOS 12.0, *) {
            return SecCertificateCopyKey(certificate)
        } else if #available(iOS 10.3, *) {
            return SecCertificateCopyPublicKey(certificate)
        } else {
            // ???
            return nil
        }
    }

【问题讨论】:

    标签: ios swift pinning public-key-pinning


    【解决方案1】:

    我找到了解决办法

    func publicKey(for certificate: SecCertificate) -> SecKey? {
        if #available(iOS 12.0, *) {
            return SecCertificateCopyKey(certificate)
        } else if #available(iOS 10.3, *) {
            return SecCertificateCopyPublicKey(certificate)
        } else {
            var possibleTrust: SecTrust?
            SecTrustCreateWithCertificates(certificate, SecPolicyCreateBasicX509(), &possibleTrust)
            guard let trust = possibleTrust else { return nil }
            var result: SecTrustResultType = .unspecified
            SecTrustEvaluate(trust, &result)
            return SecTrustCopyPublicKey(trust)
        }
    }
    

    在这里找到:https://github.com/daltoniam/Starscream/blob/a2ed45c0b2f996cb8c335c4f270ecc68c3bd4c0f/Sources/Starscream/SSLSecurity.swift#L214

    【讨论】:

      猜你喜欢
      • 2015-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 2017-08-24
      • 2021-10-10
      相关资源
      最近更新 更多