Соединение с сервером через HTTPS с использованием IP: сертификат для этого сервера недействителен - PullRequest
0 голосов
/ 01 июля 2019

При подключении к серверу через HTTPS иногда возникает ошибка DNS (невозможно преобразовать домен в IP-адрес).

Я хочу обработать эту ошибку и переподключиться к серверу напрямую черезIP.

Проблема в том, что когда я подключаюсь по IP, я получаю сообщение об ошибке, подобное:

Ошибка домена = NSURLErrorDomain Code = -1202 "Сертификат для этого сервера недействителен.Вы можете быть «12.456.789.12», что может быть вашей информацией.

И да, на сервере есть сертификат, но он привязан к имени домена!

Iесть аналогичное приложение для Android, и там решена эта проблема путем отдельного добавления верификатора домена:

connection.setHostnameVerifier(new HostnameVerifier() {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier();
        return hv.verify("example.com", session);
    }
});

Можно ли подключиться к серверу по IP и избежать проблемы с сертификатом (например, так как онбыло сделано в приложении для Android)?

Мой код:

let url = URL(string: "https://example.com/api/")
URLSession.shared.dataTask(with: url) { (data, response, error) in
    // Reconnect by IP
    if let value = error as NSError?, value.domain == NSURLErrorDomain {
        let url = URL(string: "https://12.456.789.12:443/api/")
        URLSession.shared.dataTask(with: url) { (data, response, error) in

            // TODO: Processing data received from the server

        }.resume()

        // TODO: Processing data received from the server

    }.resume()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...