2017-03-07 126 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中設置,而不會影響整個應用程序。