iOS:SSL错误 - 页面未在WKWebView中加载但在Safari中加载

Tom*_*ina 7 safari ssl ios wkwebview

在我正在开发的应用程序中,我需要处理来自我们的支付服务提供商的3-D Secure重定向.这些重定向指向发卡机构的网页,该网页WKWebView在应用程序中显示在用户的网页中.

除了一个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."
Run Code Online (Sandbox Code Playgroud)

有趣的是,相同的URL加载在Safari或中没有任何问题SFSafariViewController.甚至服务器的证书都可以:

Safari截图 -  3dsecure.csas.cz的证书

我试图NSAppTransportSecurity在应用程序的Info.plist文件中使用设置,特别是启用NSAllowsArbitraryLoadsInWebContent,NSAllowsArbitraryLoads但它确实没有效果.

Tom*_*ina 13

前瞻性保密

事实证明,服务器3dsecure.csas.cz不支持Forward Secrecy:https://www.ssllabs.com/ssltest/analyze.html d = 3dsecure.csas.cz & s = 194.50.240.77

App Transport Security在iOS9及更高版本中,所有应用程序连接都需要完美的前向保密,包括Web视图(但不包括Safari)

ATS调试

在终端中运行以下命令可运行ATS诊断并告知有关该问题以及如何解决该问题的更多信息:

/usr/bin/nscurl --ats-diagnostics --verbose https://3dsecure.csas.cz
Run Code Online (Sandbox Code Playgroud)

应用程序中的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>
Run Code Online (Sandbox Code Playgroud)

不能面向未来

需要为不支持前向保密的每个域添加此异常.不幸的是,由于它们来自支付提供商的重定向,所以不可能提前知道所有3-d安全服务器.

我不知道的是,如果不要求任何域,全局和仅在特定的webview中设置前向保密,而不影响整个应用程序.

  • 会给你赏金,因为这会节省我很多时间。 (2认同)