2017-03-07 403 views
1

在我正在开发的应用程序中,我需要处理来自我们的付款服务提供商的3D安全重定向。这些重定向指向应用中的用户在WKWebView中显示的发卡机构的网页。iOS:SSL错误 - 页面无法在WKWebView中加载,但在Safari中加载

这适用所有的时间,除了一个情况下WKWebView不会加载https://3dsecure.csas.cz/和失败,出现以下错误:

Error Domain=NSURLErrorDomain 
Code=-1200 
"An SSL error has occurred and a secure connection to the server cannot be made." 

有趣的是,同样的网址加载在Safari浏览器中或不使用问题SFSafariViewController。即使服务器的证书是好的:

Safari screenshot - certificate for 3dsecure.csas.cz

我试着在应用程序的Info.plist文件玩弄NSAppTransportSecurity设置,特别是使NSAllowsArbitraryLoadsInWebContentNSAllowsArbitraryLoads但它没有任何效果。

回答

3

正向保密

事实证明,为3dsecure.csas.cz服务器不支持正向保密:https://www.ssllabs.com/ssltest/analyze.html?d=3dsecure.csas.cz&s=194.50.240.77

完美转发保密是App Transport Security需要iOS9及以上的所有应用程序的连接,including webviews(不包括Safari然而)

ATS调试

运行在终端中下面的命令运行ATS诊断的d告诉更多的问题,以及如何解决它:

/usr/bin/nscurl --ats-diagnostics --verbose https://3dsecure.csas.cz 

ATS中的异常应用

允许在应用中的WebView连接到不支持前向安全性可以通过完成特定的服务器添加在Info.plist文件中的以下内容:

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
     <key>3dsecure.csas.cz</key> 
     <dict> 
      <key>NSExceptionRequiresForwardSecrecy</key> 
      <false/> 
     </dict> 
    </dict> 
</dict> 

不面向未来的

此异常需要被添加到永远y不支持前向保密的单个域。不幸的是,由于它们来自支付提供商的重定向,因此不可能提前知道所有3-d安全服务器。

我不知道的是,如果不需要前向保密,可以为全球任何域设置,并且只在特定的webview中设置,而不会影响整个应用程序。