Ошибка соединения TLS с сертификатом root CA и интерфейсом iOS12 NWConnection - PullRequest
0 голосов
/ 14 февраля 2020

Нам нужно создать TLS-соединение с root сертификатом CA. У нас есть файлы .pem и .der сертификата root.

Вот шаги:

  1. Создание параметров для соединения TLS с использованием NWProtocolTLS
func createTLSParameters(allowInsecure: Bool, queue: DispatchQueue) -> NWParameters {

        let options = NWProtocolTLS.Options()
        sec_protocol_options_set_local_identity(options.securityProtocolOptions, sec_identity_create(clientIdentity)!)

        sec_protocol_options_set_challenge_block(options.securityProtocolOptions, { (_, completionHandler) in
            completionHandler(sec_identity_create(clientIdentity)!)
        }, .main)

        let parameters = NWParameters(tls: options)


        return parameters
    }
Создание сокет-соединения с параметром TLS с помощью NWConnection
func createSocket() {
        let parameters = createTLSParameters(allowInsecure: true, queue: self.queue) 
        parameters.prohibitedInterfaceTypes = [.wifi]
        guard let endPoint = NWEndpoint.Port(rawValue: 4420) else {
            return
        }

        con = NWConnection(to: .hostPort(host: NWEndpoint.Host("somehostname.com"), port: endPoint), using: parameters)

        con?.stateUpdateHandler = { [weak self] status in
            if case .ready = status {
                self?.receiveData()
            }
        }

        con?.start(queue: queue)
    }
Отправить HTTPS-запрос. Здесь Обязательная информация - это URI для GET.
func sendData(for groupUrl: String, atk: String) {
        con?.send(content: "GET **Required Info**".data(using: .utf8), contentContext: .defaultMessage, isComplete: false, completion: NWConnection.SendCompletion.contentProcessed({ (error) in
            print("send Data callback---")
            if let err = error {
                print("send Data failed \(err)")
            }
        }))
    }
В ответ мы получили.
HTTP/1.0 200 OK
Cache-Control: no-cache
Pragma: no-cache
Connection: close
Content-Length: 188
<html><head><title>Request Rejected</title></head>
<body>The requested URL was rejected. Please consult with your administrator.
<br><br>Your support ID is: 7*********769</body></html>

Я думаю, что-то произошло для загрузки root CA-информации во время создания параметра TLS. Можете ли вы помочь нам способ загрузки root CA во время соединения TLS?

...