java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.NETWORK
Hallo found.NETWORK bekam ich diesen Fehler, während ich von Retrofit einen API-Service nenne, ich bin viel und fand Antwort wiejava.security.cert.CertPathValidatorException: Vertrauen Anker für Zertifizierungspfad nicht
Sucheprivate static void setupRestClient() {
RestAdapter restAdapter = new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(ROOT)
//.setClient(new OkClient(new com.squareup.okhttp.OkHttpClient()))
//.setClient(getOkClient())
.setClient(setSSLFactoryForClient(new com.squareup.okhttp.OkHttpClient()))
.setRequestInterceptor(new SessionRequestInterceptor())
.setLogLevel(RestAdapter.LogLevel.FULL)
.setLog(new AndroidLog(NetworkUtil.APP_TAG))
.build();
REST_CLIENT = restAdapter.create(Restapi.class);
}
// SET SSL
public static OkClient setSSLFactoryForClient(OkHttpClient client) {
try {
// Create a trust manager that does not validate certificate chains
final 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 {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
}
};
// Install the all-trusting trust manager
final SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
// Create an ssl socket factory with our all-trusting manager
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
client.setSslSocketFactory(sslSocketFactory);
client.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
return new OkClient(client);
}
nach setSSLFactoryForClient Methode funktioniert gut, aber ich konnte nicht verstehen, was falsch läuft und was diese Methode funktioniert weiß, dass ich das Problem auf SSL-Zertifikat-Authentifizierung verwandt ist, aber Kann jemand mir erklären, diese in Kürze Bitte
Vielen Dank Yuri !! Wenn ich die URL ändere (alle Methoden ändern nur URL) auf andere Server geben Sie mir perfekte Antwort, ist es bedeutet, dass der Server, wo URL keine Antwort geben Sie eine Sicherheitsbarriere und diesen Code umgehen, dass –
"Dies ist die Sicherheit deaktivieren von SSL. Dies ist für lokale Tests in Ordnung, aber nicht für die Verwendung mit echten Benutzern geeignet. " Wie Sie gesagt haben, was der richtige Weg ist, um dieses Problem zu lösen –
Wenn der andere Server ein gültiges Zertifikat generiert, das von anderen Clients akzeptiert wird, z. kräuseln Sie sich auf Ihrem Desktop. Dann ist es wahrscheinlich das Problem, das Zertifikat, das es ausgibt, zur Laufzeit oder über das Keytool dem Truststore hinzuzufügen. z.B. https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/okhttp3/recipes/CustomTrust.java Wenn der andere Server nur ein Testzertifikat verwendet, dann Ihren Code, falls zutreffend testen. –