Безопасный JSON Запрос через Alamofire и самозаверяющие сертификаты - PullRequest
0 голосов
/ 07 мая 2020

Я хочу, чтобы мое быстрое приложение позволяло отправлять https-запрос на node.js, а затем postgre, чтобы избежать "человека посередине". 1. Из браузера все работает нормально. 2. Из локального Ma c ОС работает нормально. 3. Но из iOS приложения не работает вообще - ошибка 9843

Swift Code:

import Foundation
import Alamofire

class NetworkManager {
    static let sharedInstance = NetworkManager()

    let manager: Alamofire.SessionManager = {
        let serverTrustPolicies: [String: ServerTrustPolicy] = [
            "https://sensemp.ru:51342/employee/req": .pinCertificates(
                certificates: ServerTrustPolicy.certificates(),
                validateCertificateChain: true,
                validateHost: true),
            "sensemp.ru:51342/employee/req": .disableEvaluation
        ]

        let configuration = URLSessionConfiguration.default
        configuration.httpAdditionalHeaders = Alamofire.SessionManager.defaultHTTPHeaders

        return Alamofire.SessionManager(
            configuration: configuration,
            serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
        )
    }()
}

и View Controller :

 override func viewDidLoad() {
        super.viewDidLoad()

//...
NetworkManager.sharedInstance.manager.request("https://sensemp.ru:51342/employee/req", method: .get).responseJSON{ response in
        switch response.result {
                        case .success(let value):
                            let json = JSON(value)
                            print("JSON: \(json)")
                        case .failure(let error):
                            print(error)
                        }

}
}

Проблема в том, что с самоподписанным сертификатом.

    2020-05-06 22:21:21.256942+0300 AlamofireExample[32310:690636] Connection 1: default TLS Trust evaluation failed(-9843)
2020-05-06 22:21:21.257176+0300 AlamofireExample[32310:690636] Connection 1: TLS Trust encountered error 3:-9843
2020-05-06 22:21:21.257331+0300 AlamofireExample[32310:690636] Connection 1: encountered error(3:-9843)

Added self-signed certificate into simulator

Что об этом пишет Apple

problem with sertificate error

Что не так с моим самоподписанным сертификатом?

enter image description here

Тот же случай и ответ от команды разработчиков Apple:

https://forums.developer.apple.com/thread/42555

Итак, TLSTool . / TLSTool s_client - connect sensemp.ru:51342 говорит мне:

  • входной поток открыт

  • выходной поток открыт

  • выходной поток имеет пробел

  • протокол: TLS 1.2

  • шифр: ECDHE_RSA_WITH_AES_128_GCM_SHA256

  • результат доверия: продолжить

  • информация о сертификате:

  • 0 + rsaEncryption 2048 sha256-with-rsa-signature 'sensemp.ru'

Как исправить эту проблему?

PS: Ma c OS Catalina 10.15.4 | iOS 13.4.1 | nginx / 1.17.9 | PostgreSQL 12 | SSL

Заранее спасибо

1 Ответ

0 голосов
/ 08 мая 2020
let manager: Alamofire.SessionManager = {
        let serverTrustPolicies: [String: ServerTrustPolicy] = [
            "https://sensemp.ru": .pinCertificates(
                certificates: ServerTrustPolicy.certificates(),
                validateCertificateChain: true,
                validateHost: true),
            "sensemp.ru": .disableEvaluation
        ]
  • добавить ip от хостов в раздел DNS сертификата

enter image description here

...