ios - iOS 10.3 中证书透明度的 Cordova SSL 错误
问题描述
在 Ionic 应用程序配置文件中启用证书透明性后,iOS 10.3 的 AJAX 调用开始失败并出现 SSL 错误。但是,它在 iOS 11 及更高版本中没有任何问题。与服务器的连接适用于原生 iOS 应用程序 Angular Web 应用程序。它仅在 Cordova 编译的应用程序中失败。
导致 AJAX 通信失败的配置
<access minimum-tls-version="TLSv1.2" origin="https://example.com" requires-certificate-transparency="true" requires-forward-secrecy="false" />
通信与 XCode 中的以下设置一起工作
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
在网络日志中,似乎应用程序在 SSL 握手期间发送 UNKNOWN。
解决方案
编辑- 必须重新审视问题并正确阅读
起初我认为配置可能有问题,但后来:
SSL 握手期间未知
吸引住了我的眼球。
从 iOS 10.3 开始,新自定义证书的默认设置是不信任它们。是的,此选项在 10.3 之前存在,但未强制执行,因此默认情况下已启用。您可以在连接到应用程序的charles 代理博客上找到此信息,但我认为它在您的情况下也是有效的。
要启用证书:
您必须转到Settings > General > About > Certificate Trust Settings
并启用所需的证书。
你可以在这里找到它提到的Technical Q&A QA1948 HTTPS and Test Servers。
此外:
您可以使用nscurl
工具来诊断您的 ATS 连接问题。
用法/usr/bin/nscurl --ats-diagnostics [--verbose] URL
然后你会更详细地失败。
推荐阅读
- c# - c# json 只合并值(忽略缺失的字段)
- aurelia - 使用 Aurelia Store 在 Actions 中复制状态的最佳方式是什么?
- javascript - 在网格中显示组合框值的问题
- python - 检查传递给函数的关键字参数的真实性不能按预期工作 - 为什么?
- jquery - 文本溢出省略号和扩展不起作用
- php - 使用时区将 SQL TimeStamp 格式化为 TimeStamp
- java - 查找所有带有自定义注释的 bean 并从此 bean 创建解析器
- c# - 如何检查 Unity 的 Firebase 数据库中是否已存在键/值
- angular - 面临从组件的角度获取服务价值的问题
- angular - Angular:有条件的父组件