Команда Curl работает на CLI, но Alamofire не может аутентифицировать - PullRequest
0 голосов
/ 09 апреля 2020

Вот команда curl, которая работает:

curl -d {"Key1": "value1"} -k -vvvv --request POST --header "Content-Type: application / json "--key KEY.pem --cacert CRT.pem --cert KEY.pem" URL "

Как мне перевести это в команду запроса Alamofire? Я получаю ошибки аутентификации:

Connection 1: default TLS Trust evaluation failed(-9807)
2020-04-09 01:51:46.604692-0600 CertificatePinningExample[7192:1891639] Connection 1: TLS Trust encountered error 3:-9807
2020-04-09 01:51:46.604879-0600 CertificatePinningExample[7192:1891639] Connection 1: encountered error(3:-9807)
2020-04-09 01:51:46.606672-0600 CertificatePinningExample[7192:1891639] Connection 1: unable to determine interface type without an established connection
2020-04-09 01:51:46.650936-0600 CertificatePinningExample[7192:1891639] Task <9E539D4B-9694-426E-B382-6350044743B0>.<1> HTTP load failed, 0/0 bytes (error code: -1202 [3:-9807])
2020-04-09 01:51:46.662507-0600 CertificatePinningExample[7192:1891652] Task <9E539D4B-9694-426E-B382-6350044743B0>.<1> finished with error [-1202] Error Domain=NSURLErrorDomain Code=-1202 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “BLAH” which could put your confidential information at risk." UserInfo={NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorDomainKey=3, NSErrorPeerCertificateChainKey=(

// Код Alamofire для запуска запроса


override func viewDidLoad() {
        super.viewDidLoad()

        let evaluators = [
          "SERVER_IP":
            PinnedCertificatesTrustEvaluator(certificates:
              getCertificates()
              )
        ]

        let session = Session(
          serverTrustManager: ServerTrustManager(evaluators: evaluators)
        )



        let url = URL(string: "URL_TO_HIT")!
        //enableCertificatePinning()

        var dict: NSDictionary = ["SessionId":""]
        var data: Data = Data.init()
        do {
            data = try JSONSerialization.data(withJSONObject: dict, options: [])
        } catch{
            data = "".data(using: .utf8)!
        }

        //let data = try JSONSerialization.data(withJSONObject: dict, options: [])

        let request = AF.request(url, method: .post)
        // 2
        request.responseJSON { (data) in
          print(data)
        }
    }

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

        return [certificate]
   }


Меня беспокоит: Alamofire запрашивает только один сертификат, а я использую три Сертифицированные флаги в завитке. Как мне перевести запрос Alamofire на тот же, что и curl?

...