我开发的android应用程序使用Volley。
所有通信均通过HTTPS联系。
因为我是在本地环境测试的,所以我对Tomcat使用自签名证书。
之前我只有安卓2.3 and 3.0设备。现在我也有了4.1和4.4.
我的实现使用这种方法:http://developer.android.com/training/articles/security-ssl.html http://developer.android.com/training/articles/security-ssl.html (part 未知的证书颁发机构)
在 Android 设备上高达 4.1它工作得很好。带有自定义证书的 SSLSocketFactory 被传递给 Volley:
Volley.newRequestQueue(getApplicationContext(), new HurlStack(null, socketFactory));
但是 Android 4.1+ 上会发生什么?
为什么它不起作用?
我也尝试过NullX509信任管理器像这样:
private static class NullX509TrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType)
throws CertificateException {
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType)
throws CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
}
但它仍然不起作用...
信任所有 SSL 证书:-
如果您想在测试服务器上进行测试,可以绕过 SSL。
但请勿将此代码用于生产。
public static class NukeSSLCerts {
protected static final String TAG = "NukeSSLCerts";
public static void nuke() {
try {
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
X509Certificate[] myTrustedAnchors = new X509Certificate[0];
return myTrustedAnchors;
}
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) {}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) {}
}
};
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
});
} catch (Exception e) {
}
}
}
请在 Activity 或应用程序类的 onCreate() 函数中调用此函数。
NukeSSLCerts.nuke();
这可以用于 Android 中的 Volley。
更多参考https://new Fivefour.com/android-trust-all-ssl-certificates.html https://newfivefour.com/android-trust-all-ssl-certificates.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)