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

时间:2017-03-07 10:35:05

标签: ios ssl safari wkwebview

在我正在处理的应用中,我需要处理来自我们的支付服务提供商的3-D安全重定向。这些重定向指向发卡行的网页,该网页在应用中以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."

有趣的是,在Safari或SFSafariViewController中加载相同的网址没有任何问题。甚至服务器的证书也没关系:

Safari screenshot - certificate for 3dsecure.csas.cz

我尝试在应用的NSAppTransportSecurity文件中使用Info.plist设置,特别是启用NSAllowsArbitraryLoadsInWebContentNSAllowsArbitraryLoads,但确实没有效果。

1 个答案:

答案 0 :(得分:12)

Forward Secrecy

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

iOS9及更高版本中的App Transport Security需要完全保密,以便所有应用连接including webviews(不包括Safari)

ATS调试

在终端中运行以下命令可运行ATS诊断,并详细说明问题及其解决方法:

/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>

不面向未来

需要为每个不支持前向保密的域添加此异常。不幸的是,由于它们来自支付提供商,因此无法事先了解所有3-d安全服务器。

我不知道的是,如果不需要向前保密,则可以在全局范围内,仅在特定网页视图中设置任何域名,而不会影响整个应用。