Eug*_*rov 14 ssl android release cordova
我对cordova有一个非常困难且完全不可解决的问题.
完全以--debug
模式编译的程序在模式编译后停止工作--release
.我确保源是相同的,效果是恒定的.
--debug
构建和--release
构建之间的唯一区别是--release
构建无法打开任何SSL连接.
这个问题本地化非常狭窄,在我的例子中它是以下行:
Socket = new WebSocket('wss://376.su/');
Run Code Online (Sandbox Code Playgroud)
我的一个朋友在行中报告了同样的错误:
<img src="https://blabla" />;
Run Code Online (Sandbox Code Playgroud)
UPD:问题解决了,看看答案.
Eug*_*rov 16
我已经确定了问题的确切来源,我找到了完美的解决方案.事实证明,这是两个独立问题的叠加,每个问题都严重误导:
来自Thawte的我的SSL证书(尽管其成本)不被Android 5.1.1识别为有效的(同时被所有桌面浏览器识别)
该--debug
标志cordova build
只是忽略证书"错误"(静默).
转到项目的目录并找到以下文件:
platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java
Run Code Online (Sandbox Code Playgroud)
找到方法定义(onReceivedSslError
)和以下条件:
(appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0
Run Code Online (Sandbox Code Playgroud)
这是什么使--debug
和--release
不同.为了忽略证书"错误",应执行以下代码:
handler.proceed();
return;
Run Code Online (Sandbox Code Playgroud)
此文件在构建过程中持续存在.下次向项目添加平台时,不要忘记忽略这些准错误.
Android无法识别该证书的证书颁发机构(CA)。这是一个常见问题,尤其是对于较旧的设备,它会在每次出现新的CA时影响每台设备。
一种可能的解决方案是利用信任层次结构:
这样,您将首先发送CA的证书,以确保设备在域证书之前信任您的CA。
如果您有分开的证书,则此shell命令可以解决问题:
$ cat authority1.cert authority2.cert authority3.cert your_domain.cert >> your_domain_bundle.cert
Run Code Online (Sandbox Code Playgroud)
或者,如果您有一个ca-bundle
文件,即证书的串联,请运行:
$ cat authority.ca-bundle your_domain.cert >> your_domain_bundle.cert
Run Code Online (Sandbox Code Playgroud)your_domain_bundle.cert
到服务器。https
和解决的问题wss
。
归档时间: |
|
查看次数: |
3728 次 |
最近记录: |