最近项目里遇见一个奇葩问题,由于项目之前的服务器地址是http,然而最近又换成https的,本来从不安全的证书换成安全的证书一切应该ok,但重新打包运行却出现了新问题,(怀疑证书压根就是不安全的)
1 项目主体为,cordova+vue+crosswalk 我负责写原生插件,但自从换成https的服务器地址后 项目莫名的弹出
Ssl? 首先想到的是网络请求忽略不安全的证书问题,但回头想想 这写操作都是前端写的 怎么会在我这弹出这个error 呢 最后想到因为前端的内容都是加载在crosswalk上的 那就从它入手吧 反复度娘 最后在自己封装好的XWalkResourceClient中加了一个
@Override
public boolean shouldOverrideUrlLoading(XWalkView view, String url) {
return parentEngine.client.onNavigationAttempt(url);
}
最后问题完美解决(我认为这不是从源头解决,只是缓兵之计,欢迎大神指教)
2 ssl弹窗问题解决之后 接着又出现了 视频无法播放的的问题, 由于项目是用VideoView 做播放的 度娘了一下 说是videoview 无法播放https的网络视频,论坛上又没有实质性的解决方案,本想着换一个第三方支持https视频播放的框架,但想想既然crosswalk可以在封装好的地方忽略证书,VideoView 也可以,最后在 自己封装好的CustomVideoView中 重写了
@Override
public void setVideoURI(Uri uri) {
super.setVideoURI(uri);
try {
HttpsURLConnection.setDefaultSSLSocketFactory(SSlUtiles.createSSLSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new SSlUtiles.TrustAllHostnameVerifier());
} catch (Exception e) {
e.printStackTrace();
}
}
方法 ,视频无法播放问题完美解决 其中SSlUtiles类为一个默认信任所有的证书的工具类 最后贴出 希望能用到的朋友共勉
public class SSlUtiles {
/**
* 默认信任所有的证书
*
* xts
*/
public static SSLSocketFactory createSSLSocketFactory() {
SSLSocketFactory sSLSocketFactory = null;
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, new TrustManager[] { (TrustManager) new TrustAllManager() }, new SecureRandom());
sSLSocketFactory = sc.getSocketFactory();
} catch (Exception e) {
}
return sSLSocketFactory;
}
public static class TrustAllManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
public static class TrustAllHostnameVerifier implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
}
欢迎指教