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

标签 ios ssl safari wkwebview

在我正在开发的应用程序中,我需要处理来 self 们的支付服务提供商的 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."

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

Safari screenshot - certificate for 3dsecure.csas.cz

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

最佳答案

前向保密

事实证明,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>

不是面向 future 的

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

我不知道是否可以在不影响整个应用程序的情况下,为任何域、全局和特定 webview 设置不需要前向保密。

关于iOS:SSL 错误 - 页面未在 WKWebView 中加载但在 Safari 中加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42645946/

相关文章:

java - 错误提交响应 java.io.IOException : Broken pipe at sun. nio.ch.FileDispatcher.write0(Native Method)

python-3.x - 在 Cherrypy、Python3 上禁用 TLS1.0 和 TLS1.1

jquery - 元素在移动版 chrome 和 safari 中不可见

html - CSS 背景图像不会出现在 Safari 中

ios - 在实现类中没有任何逻辑的情况下自动向上滚动文本字段

iphone - CATiledLayer 的背景图片

c# - sslStream.AuthenticateAsServer 忽略 RemoteCertificateValidationCallback

css - SVG stroke-dashoffset 不适用于 safari

ios - swift 能捕捉到 fatal error 吗?

ios - 什么时候发布 AVCaptureDeviceSubjectAreaDidChangeNotification?