Как использовать закрепление ключа publi c вместо закрепления сертификата - PullRequest
2 голосов
/ 09 января 2020

Я использую закрепление сертификата. Но теперь необходимо изменить положение на закрепление ключа * publi c. Я взял проект у кого-то еще. Я могу реализовать публичные c закрепления клавиш, используя Trustkit . Но если я собираюсь использовать TrustKit, мне придется изменить много реализаций. Я добавил код для закрепления сертификата.

Я хотел использовать .pinPublicKeys вместо .pinCertificates. Но в этой реализации я должен добавить сертификат в сборку, чего я стараюсь избегать. Я просто хочу использовать ключ publi c ha sh. Для .pinPublicKey я должен добавить [secKey]. Я не смог найти решения для преобразования ключа publi c ha sh в SecKey. Пожалуйста, помогите с этой проблемой.

class Client {

static let shared = Client()

var manager:SessionManager?

init() {
    let certificates: [SecCertificate] = getCertificates()
    let serverTrustPolicies: [String: ServerTrustPolicy] = [
        "app.###.com": .pinCertificates(
            certificates: certificates,//ServerTrustPolicy.certificates(),
            validateCertificateChain: true,
            validateHost: true
        )
    ]

    manager = Alamofire.SessionManager(
        configuration: URLSessionConfiguration.default,
        serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
    )
}

private func getCertificates() -> [SecCertificate] {
    let url = Bundle.main.url(forResource: "certificate", withExtension: "der")!
    let localCertificate = try! Data(contentsOf: url) as CFData
    guard let certificate = SecCertificateCreateWithData(nil, localCertificate)
       else { return [] }

    return [certificate]
}

}

...