【问题标题】:SSL error when trying to load TLSv1.2 site in an iframe inside UIWebView尝试在 UIWebView 内的 iframe 中加载 TLSv1.2 站点时出现 SSL 错误
【发布时间】:2018-02-07 08:45:39
【问题描述】:

我正在我的 iOS 应用程序(用户的个人资料)中显示一个网站,其中包含购买某些服务的选项。通过在iframe 内打开第三方支付页面,即可在UIWebView 内完成购买。
尝试加载此支付页面时,向 webView:didFailLoadWithError: 委托方法发送 SSL 错误。

SSL 错误:

Error Domain=NSURLErrorDomain Code=-1200 \"发生 SSL 错误,无法与服务器建立安全连接。\" UserInfo={_kCFStreamErrorCodeKey=-9806, NSLocalizedRecoverySuggestion=您是否仍要连接到服务器?, NSUnderlyingError=0x610000255c90 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 \"发生 SSL 错误,无法与服务器建立安全连接。\" UserInfo={NSErrorFailingURLStringKey=https://SOME-URL, NSLocalizedRecoverySuggestion=您要连接吗仍然到服务器?, _kCFNetworkCFStreamSSLErrorOriginalValue=-9806, _kCFStreamPropertySSLClientCertificateState=0, NSLocalizedDescription=发生 SSL 错误,无法与服务器建立安全连接。, _kCFStreamErrorDomainKey=3, NSErrorFailingURLKey=https://SOME-URL, _kCFStreamErrorCodeKey=-9806}} , NSLocalizedDescription=发生 SSL 错误,无法与服务器建立安全连接。, NSErrorFailingURLKey=https://SOME-URL, NSErrorFailingURLStringKey= https://SOME-URL, _kCFStreamErrorDomainKey=3}

我在浏览器中测试了这个 URL,发现它使用 TLSv1.2,所以我不明白问题出在哪里。
相同的 iframe 在 iOS Safari 和 Android 应用程序中按预期工作......

当我在 Info.plist 中禁用 ATS (NSAppTransportSecurity) 时,会显示付款页面,但我担心 Apple 不允许它是 AppStore(我不想这样做 - 这是一个付款页面,它应该是安全的)。

这是付款网址: https://cgmpi.creditguard.co.il/CGMPI_Server/PerformTransaction?txId=a51270b0-9cb5-43aa-83cc-1cb0abe08691

【问题讨论】:

  • 您是如何验证 TLS v1.2 的?
  • 如果您提供重现问题的 URL 可能会更容易。除此之外,问题可能不是 TLS 协议版本,而是提供的密码 - 浏览器和 uiwebview 之间可能不同
  • 添加了付款网址。通过在我的 Mac 上从 FireFox 浏览到此 URL 来测试 TLS 版本并检查安全连接详细信息...

标签: ios ssl iframe uiwebview tls1.2


【解决方案1】:

我会在 Info.plist 中放置一个关于 webview、域和 TLS 版本的例外,以确保 ATS 层不会阻止任何连接。

类似这样的:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoadsInWebContent</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>creditguard.co.il</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
            </dict>
        </dict>
    </dict>

【讨论】:

  • 我不想将此域标记为不安全,因为 (1) 它是一个支付页面,应该是应用程序中最安全的,并且 (2) Apple 可能不允许它在应用审查。此外,我已经尝试过了,它并没有解决问题 - 只有完全禁用 ATS 才有帮助......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多