मेरे पास एक ही कोड के साथ 3 गंभीर सेटअप हैं।
- एसएसएल के बिना सर्वर 1 : इसका काम ठीक है।
- सर्वर 2 SSL पर उत्पादन के साथ गंभीर है (प्रमाण पत्र प्राधिकृत करें): इसका काम ठीक है।
- सर्वर 3 एसएसएल के साथ टेस्ट पर गंभीर (प्रमाण पत्र समान प्रमाणीकरण प्राधिकृत करें सर्वर 2 के रूप में): लेकिन यह काम नहीं कर रहा है। यह एक अपवाद का अनुसरण करता है।
त्रुटि:
onErrorResponse: com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
in.chsone.member.exceptions.UnhandledException: error.networkResponse is null.
at in.chsone.member.network.NetworkResponseHandler.onErrorResponse(NetworkResponseHandler.java:181)
at com.android.volley.Request.deliverError(Request.java:598)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:101)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
उत्तर:
जवाब के लिए 2 № 1public class HttpsTrustManager implements X509TrustManager {
private static TrustManager[] trustManagers;
private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[]{};
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] x509Certificates, String s)
throws java.security.cert.CertificateException {
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] x509Certificates, String s)
throws java.security.cert.CertificateException {
}
public boolean isClientTrusted(X509Certificate[] chain) {
return true;
}
public boolean isServerTrusted(X509Certificate[] chain) {
return true;
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return _AcceptedIssuers;
}
public static void allowAllSSL() {
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
});
SSLContext context = null;
if (trustManagers == null) {
trustManagers = new TrustManager[]{new HttpsTrustManager()};
}
try {
context = SSLContext.getInstance("TLS");
context.init(null, trustManagers, new SecureRandom());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
HttpsURLConnection.setDefaultSSLSocketFactory(context
.getSocketFactory());
}
}
एली में कॉल एप से पहले नीचे की ओर कॉल करें
HttpsTrustManager.allowAllSSL();