使用Android Volley发出HTTPS请求并信任所有SSL证书
我想信任我的应用程序中的所有SSL证书使用Android Volley发出HTTPS请求并信任所有SSL证书,android,ssl,android-volley,Android,Ssl,Android Volley,我想信任我的应用程序中的所有SSL证书 try { TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { @Override public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws Ce
try {
TrustManager[] trustAllCerts = new TrustManager[] {
new 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 {
}
public X509Certificate[] getAcceptedIssuers() {
X509Certificate[] myTrustedAnchors = new X509Certificate[0];
return myTrustedAnchors;
}
}
};
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) {
Log.e(TAG, "nuke", e);
}
我在我的android.app.Application中添加了这些代码
try {
TrustManager[] trustAllCerts = new TrustManager[] {
new 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 {
}
public X509Certificate[] getAcceptedIssuers() {
X509Certificate[] myTrustedAnchors = new X509Certificate[0];
return myTrustedAnchors;
}
}
};
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) {
Log.e(TAG, "nuke", e);
}
但是截击错误.networkResponse.statusCode
总是500
我使用firefox访问JSONDataUrl,它工作正常
救命啊
String JSONDataUrl=”https://something";
JsonObjectRequest JsonObjectRequest=新的JsonObjectRequest(Request.Method.GET,JSONDataUrl,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
dismissDialog();
Log.d(标签“响应:”+响应);
}
},new Response.ErrorListener(){
@凌驾
公共错误响应(截击错误截击错误){
dismissDialog();
如果(调试){
if(volleyError.networkResponse!=null){
Log.e(标记“headers:+volleyError.networkResponse.headers”);
Log.e(标记“statusCode:+volleyError.networkResponse.statusCode”);
}
}
Log.e(TAG,volleyError.toString(),volleyError);
}
});
add(jsonObjectRequest);
可能存在的重复项。我认为Emmby有最好的答案,但它不包括信任所有证书。其他人为此提供了代码。我阅读了该主题和Daniel的答案。但是我找不到方法SSLSocketFactory.setHostnameVerifier和SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER。“但是volleyError.networkResponse.statusCode总是500”-这是一个服务器错误。您需要先修复服务器。服务器修复后,您可以继续了解客户端如何连接到服务器。@jww我编写的代码与Daniel的答案类似。现在很好用。非常感谢。@android_-su:你能发布你的答案吗,你是如何在截击中实现的