【问题标题】:iOS: SSL error - page not loading in WKWebView but loads in SafariiOS:SSL 错误 - 页面未在 WKWebView 中加载但在 Safari 中加载
【发布时间】:2017-07-27 12:32:12
【问题描述】:

在我正在开发的应用程序中,我需要处理来自我们的支付服务提供商的 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 中加载相同的 URL 时没有问题。连服务器的证书都可以:

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

【问题讨论】:

    标签: ios ssl safari wkwebview


    【解决方案1】:

    前向保密

    原来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 诊断并详细说明问题以及解决方法:

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

    应用中的 ATS 异常

    可以通过在Info.plist 文件中添加以下内容来允许应用程序中的 web 视图连接到不支持前向保密的特定服务器:

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

    不是面向未来的

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

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

    【讨论】:

    • 会给你一个赏金,因为这会节省我很多时间。
    • 注意:我记得联系过 CSAS 的技术支持,但我相信我从未收到他们的回复。也请随时与他们联系,这样以后就不需要这样的解决方法了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    相关资源
    最近更新 更多