【问题标题】:cordova "release" behaves differently to "debug" regarding SSL关于 SSL,cordova“发布”的行为与“调试”不同
【发布时间】:2015-11-08 09:34:57
【问题描述】:

我在使用cordova时遇到了非常困难且完全无法搜索的问题。

--debug 模式下编译的程序可以完美运行,但在--release 模式下编译后会停止运行。 我确保来源是相同的,效果是恒定的。

--debug build 和 --release build 之间的唯一区别是 --release build 无法打开任何 SSL 连接

这个问题的范围很窄,在我的例子中是以下行:

Socket = new WebSocket('wss://376.su/');

我的一个朋友在该行报告了同样的错误:

<img src="https://blabla" />;

UPD:问题已解决,请查看答案。

【问题讨论】:

  • 是的,我做到了。为简洁起见,我省略了同样的“--release”程序在没有 SSL 的情况下也能完美运行的声明,前提是其他一切都相同。

标签: android cordova ssl release


【解决方案1】:

问题

我已经确定了问题的确切根源并找到了完美的解决方案。结果证明这是两个独立问题的叠加,每个问题都严重误导:

  1. 我来自 Thawte 的 SSL 证书(尽管收费)未被 Android 5.1.1 识别为有效证书(但被所有桌面浏览器识别)

  2. cordova build 中的 --debug 标志只是忽略证书“错误”(静默)。

解决方案

转到你的项目目录并找到以下文件:

platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java

找到方法定义(onReceivedSslError)和以下条件:

(appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0

这就是 --debug--release 的不同之处。 为了忽略证书“错误”,应执行以下代码:

handler.proceed();
return;

此文件在构建过程中持续存在。 下次向项目添加平台时,别忘了忽略那些准错误。

【讨论】:

  • 该条件实际上应该被忽略,并且在任何情况下都应该执行该代码,如您所说!这是科尔多瓦的 6.2.0,这项技术仍然有帮助!
  • 这可以让我的发布版本正常工作,但是由于某种原因,当相同的 release.apk 上传到 Play 商店时,它又失败了?
  • 此解决方案不安全,请正确部署您的证书参见stackoverflow.com/questions/32021743/…
【解决方案2】:

问题

Android 无法识别该证书的证书颁发机构 (CA)。这是一个常见问题,尤其是旧设备,每次出现新 CA 时都会影响每台设备。

解决方案

A.配置中间证书。

寻找适合您平台的详细设置。以下是一些示例:

您可以在Q&A at StackExchange's Unix 中了解更多信息。

B.使用 信任层次结构 链接证书。

利用信任层次结构功能,您可以链接证书。

您可以使用以下工具来利用这些努力:https://whatsmychaincert.com/

或者你可以自己做,因为它只是文本文件(证书)的串联:

Linux / macOS 的示例步骤

  1. 将权威证书与您的证书连接起来。 这样,您将首先发送您的 CA 证书,以确保设备您的域证书之前信任您的 CA。

    如果您有单独的证书,这个 shell 命令可以解决问题:

    $ cat authority1.cert authority2.cert authority3.cert your_domain.cert >> your_domain_bundle.cert
    

    或者,如果您有一个 ca-bundle 文件,即证书的串联,只需运行:

    $ cat authority.ca-bundle your_domain.cert >> your_domain_bundle.cert
    
  2. your_domain_bundle.cert 添加到服务器。

解决了任何 ssl 协议、httpswss 等的问题。

【讨论】:

  • 如果有更好的解决方案,就不需要半解决方案。忽略“权威”并不会使 SSL 的目的失效,学习一些数学知识。
  • 您能解释一下忽略证书的有效性比验证证书颁发机构更好吗?我想知道为什么我错了。
  • 此解决方案比忽略错误要好,但更通用的“这就是中间证书,这是在各种平台上安装它们的资源”可能是合适的。至少有十几种不同的方法可以为您的 Web 服务器设置 CA 证书。
  • 这是此问题的真正解决方案,如果您有此问题症状,请检查您的 SSL 证书是否正确部署,并通过以下方式连接链和中间证书:ssllabs.com/ssltest/analyze.html?d=example.com&latest
【解决方案3】:

我遇到了同样的问题,但主要来源不是代码 SystemWebViewClient.java。你的帖子帮助我找到了确切的来源。实际上,主要来源是您尝试访问的 https 站点缺少 Cordova 连接到安全站点所需的证书颁发机构 (CA)。实际上,我使用的是基于 Ionic/Cordova 构建的 Siberian CMS。

您可以通过https://www.sslshopper.com/ssl-checker.html#hostname=查看网站

【讨论】:

    猜你喜欢
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多