ऐसे तीन होस्ट हैं जो एंड्रॉइड ऐप प्रमाणीकरण और प्रमाणीकरण करते हैं। अंतिम होस्ट आरईएसटी एपीआई है। ओथ प्रमाणीकरण और प्राधिकरण प्रक्रिया का उपयोग करने के लिए पहली बार यह बिना किसी समस्या के काम करता है।एंड्रॉइड java.security.cert.CertPathValidatorException: प्रमाणीकरण पथ के लिए ट्रस्ट एंकर
लेकिन उपयोगकर्ता लॉगिन के बाद ऐप को मारता है और आरईएसटी एपीआई द्वारा प्रदान की जाने वाली सेवाओं तक पहुंचता है और फिर ऐप खोलता है, तो यह समस्या उत्पन्न होती है। इस समय प्रमाणीकरण और प्रमाणीकरण प्रक्रिया नहीं हो रही है, केवल आरईएसटी एपीआई। यह java.security.cert.CertPathValidatorException
के कारण हुआ लेकिन यह पहले उपयोग के दौरान काम कर रहा था (लॉगिन करें और फिर ऐप का उपयोग करें)।
क्या कोई इस अपवाद के पीछे परिदृश्य और ऐप के साथ क्या गलत बता सकता है। यह काम करता है अगर प्रमाणीकरण अपवादों को this SO answer के अनुसार बोले के रूप में अनदेखा किया जाता है।
SSLSocketFactory sslSocketFactory = null;
try {
TrustManagerFactory tmf = TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm());
// Initialise the TMF as you normally would, for example:
try {
tmf.init((KeyStore)null);
} catch(KeyStoreException e) {
e.printStackTrace();
}
TrustManager[] trustManagers = tmf.getTrustManagers();
final X509TrustManager origTrustmanager = (X509TrustManager)trustManagers[0];
// Create a trust manager that does not validate certificate chains
TrustManager[] wrappedTrustManagers = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return origTrustmanager.getAcceptedIssuers();
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
try {
origTrustmanager.checkClientTrusted(certs, authType);
} catch(CertificateException e) {
e.printStackTrace();
}
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
try {
origTrustmanager.checkServerTrusted(certs, authType);
} catch(CertificateException e) {
e.printStackTrace();
}
}
}
};
//TrustManager[] trustAllCerts = TrustManagerFactory.getInstance("SSL").getTrustManagers();
// Install the all-trusting trust manager
final SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, wrappedTrustManagers, new java.security.SecureRandom());
// Create an ssl socket factory with our all-trusting manager
sslSocketFactory = sslContext.getSocketFactory();
} catch (NoSuchAlgorithmException | KeyManagementException e) {
e.printStackTrace();
}
return sslSocketFactory;
मैं http अनुरोधों के लिए Okhttp 3 का उपयोग कर रहा हूं। कोई भी सुझाव इस मुद्दे को हल करने में मदद करेगा। और अगर मैं उपरोक्त कोड स्निपेट का उपयोग करता हूं, तो कृपया मुझे बताएं, क्या यह एक सुरक्षा उल्लंघन है? क्या यह ऐप की सुरक्षा पर असर पड़ेगा?
नोट: आपके 'चेकसेवर ट्रस्टेड' कार्यान्वयन बेकार है क्योंकि आप प्रमाणपत्र अपवाद को पकड़ते हैं और अनदेखा करते हैं। इसलिए सभी सर्वर प्रमाणपत्र (भरोसेमंद और अविश्वसनीय) स्वीकार किए जाते हैं! स्पष्टीकरण के लिए – Robert
@Robert धन्यवाद। हां ** सुरक्षा परिप्रेक्ष्य में यह असुरक्षित और बेकार है **, मुझे अपने उत्तर में वर्णित सही समाधान मिला है। –