cordova "release" 在 SSL 方面的行为与 "debug" 不同
cordova "release" behaves differently to "debug" regarding SSL
我在使用 cordova 时遇到了非常困难且完全无法用谷歌搜索的问题。
一个程序,在--debug
模式下编译时运行良好,在--release
模式下编译后停止工作。
我确保来源相同,效果不变。
--debug
构建和 --release
构建之间的唯一区别是 --release
构建无法打开任何 SSL 连接.
这个问题的范围很窄,在我的例子中是下面一行:
Socket = new WebSocket('wss://376.su/');
我的一个朋友在行中报告了同样的错误:
<img src="https://blabla" />;
UPD:问题已解决查看答案。
问题
我已经确定了问题的确切根源,并且找到了完美的解决方案。结果证明这是两个独立问题的叠加,每个问题都严重误导:
Android5.1.1 无法将我从 Thawte 获得的 SSL 证书(尽管有费用)识别为有效证书(但所有桌面浏览器都可以识别)
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;
此文件在构建过程中一直存在。
下次向项目添加平台时,不要忘记忽略这些准错误。
问题
Android 无法识别该证书的证书颁发机构 (CA)。这是一个常见问题,特别是对于旧设备,每次出现新 CA 时它都会影响每台设备。
解决方案
一个。配置中间证书。
查找适用于您的平台的详细设置。以下是一些示例:
Microsoft IIS 和 Exchange:https://knowledge.digicert.com/solution/SO16219.html
RedHat 上的 Apache(及相关):https://access.redhat.com/solutions/43575
您可以在 Q&A at StackExchange's Unix 中阅读更多相关信息。
乙。使用 信任层次结构 链接证书。
利用 信任层次结构 功能,您可以链接证书。
您可以使用以下工具来发挥作用:https://whatsmychaincert.com/
或者您可以自己完成,因为它只是文本文件(证书)的串联:
Linux/macOS
的示例步骤
将权威机构的证书与您的证书相结合。
这样,您将首先发送您的 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
将 your_domain_bundle.cert
添加到服务器。
任何 ssl 协议的问题都已解决,https
、wss
等
我遇到了同样的问题,但主要来源不是代码 SystemWebViewClient.java。您的 post 帮助我找到了确切的来源。实际上,主要来源是您尝试访问的 https 站点缺少 Cordova 连接到安全站点所需的证书颁发机构 (CA)。实际上,我使用的是基于 Ionic/Cordova 构建的 Siberian CMS。
查看网站
我在使用 cordova 时遇到了非常困难且完全无法用谷歌搜索的问题。
一个程序,在--debug
模式下编译时运行良好,在--release
模式下编译后停止工作。
我确保来源相同,效果不变。
--debug
构建和 --release
构建之间的唯一区别是 --release
构建无法打开任何 SSL 连接.
这个问题的范围很窄,在我的例子中是下面一行:
Socket = new WebSocket('wss://376.su/');
我的一个朋友在行中报告了同样的错误:
<img src="https://blabla" />;
UPD:问题已解决查看答案。
问题
我已经确定了问题的确切根源,并且找到了完美的解决方案。结果证明这是两个独立问题的叠加,每个问题都严重误导:
Android5.1.1 无法将我从 Thawte 获得的 SSL 证书(尽管有费用)识别为有效证书(但所有桌面浏览器都可以识别)
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;
此文件在构建过程中一直存在。 下次向项目添加平台时,不要忘记忽略这些准错误。
问题
Android 无法识别该证书的证书颁发机构 (CA)。这是一个常见问题,特别是对于旧设备,每次出现新 CA 时它都会影响每台设备。
解决方案
一个。配置中间证书。
查找适用于您的平台的详细设置。以下是一些示例:
Microsoft IIS 和 Exchange:https://knowledge.digicert.com/solution/SO16219.html
RedHat 上的 Apache(及相关):https://access.redhat.com/solutions/43575
您可以在 Q&A at StackExchange's Unix 中阅读更多相关信息。
乙。使用 信任层次结构 链接证书。
利用 信任层次结构 功能,您可以链接证书。
您可以使用以下工具来发挥作用:https://whatsmychaincert.com/
或者您可以自己完成,因为它只是文本文件(证书)的串联:
Linux/macOS
的示例步骤将权威机构的证书与您的证书相结合。 这样,您将首先发送您的 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
将
your_domain_bundle.cert
添加到服务器。
任何 ssl 协议的问题都已解决,https
、wss
等
我遇到了同样的问题,但主要来源不是代码 SystemWebViewClient.java。您的 post 帮助我找到了确切的来源。实际上,主要来源是您尝试访问的 https 站点缺少 Cordova 连接到安全站点所需的证书颁发机构 (CA)。实际上,我使用的是基于 Ionic/Cordova 构建的 Siberian CMS。
查看网站