我们有一个企业应用程序,其中包含一个WKWebView
,该应用程序需要访问需要客户端证书的网站。
所需的客户端证书已安装在设备上,我们能够在Safari中访问受保护的站点。当前,客户端证书是手动下载并受信任的。
但是,当我们尝试在应用程序内的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
来使用系统级客户端证书的方法吗?