WKWebView не использует клиентские сертификаты, доверенные Safari - PullRequest
0 голосов
/ 08 февраля 2019

У нас есть корпоративное приложение, которое содержит WKWebView, которому необходим доступ к сайту, требующему сертификата на стороне клиента.

Требуемый сертификат клиента установлен на устройстве, и мы можем получить доступ к защищенномусайт в сафари.В настоящее время сертификат клиента загружается и доверяется вручную.

Однако, когда мы пытаемся получить доступ к тому же сайту в пределах WKWebView в нашем приложении, сайт возвращает HTTP 400, потому что он не может найти сертификат на стороне клиента.

Я попробовал следующую реализацию соответствующего метода navigationDelegate:


        print("authentication challenge: \(challenge)")

        guard let trust = challenge.protectionSpace.serverTrust else {
            print("no server trust: \(challenge.protectionSpace)")
            completionHandler(URLSession.AuthChallengeDisposition.useCredential, nil)
            return
        }

        print("using server trust: \(challenge.protectionSpace)")
        let cred = URLCredential(trust: trust)
        completionHandler(.useCredential, cred)
    }

Когда этот метод вызывается для сертификата клиента, challenge.protectionSpace.serverTrust не существует.

Если я помещу клиентский сертификат в комплект приложения (как правило, не рекомендуется и не является приемлемым вариантом для производственного использования), загрузите его и сообщите WKWebView использовать эти учетные данные в обратном вызове completionHandler(), затем сайт загрузится.

Насколько я понимаю, WKWebView должен иметь доступ к тем же сертификатам на стороне клиента, что и Safari, поэтому я затрудняюсь объяснить, почему это не работает.

Кто-нибудь знаетспособа заставить WKWebView использовать общесистемные клиентские сертификаты?

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