java.Sicherheit.cert.CertPathValidatorException: Vertrauen-Anker für die Zertifizierung Pfad nicht gefunden.NETZWERK
java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.NETWORK
Hallo, ich habe diesen Fehler während ich den Aufruf einer API-service von retrofit , ich bin auf der Suche eine Menge, und die Antwort darauf gefunden, wie
private 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 der Verwendung setSSLFactoryForClient Methode Sie arbeiten gut, aber ich konnte nicht verstehen, was falsch läuft und was diese Methode tut, ich kenne das problem im Zusammenhang mit SSL-Zertifikat-Authentifizierung, aber Kann einer mir erklären dies ist in Kürze, Bitte
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist das deaktivieren der Sicherheit von SSL. Das ist ok, für lokale Tests aber nicht geeignet für den Einsatz mit echten Nutzern.
Wenn Sie Ihre lokalen dev-server mit einem self signed cert, dann ist dies, wie Sie sagen, es zu schließen, um es mit minimalen Schmerzen.
Generell jeder Benutzer agent (Firefox auf Windows, Safari auf Mac, Android) wird eine Liste von root-CAs vertraut, um zu überprüfen, die eine Webseiten-Zertifikate. Einige neuere Dienste wie let ' s encrypt wird nicht vertraut werden, auch auf älteren Plattformen, so dass Sie können fügen Sie Ihre eigenen Zertifikate, die Sie wissen, vor der Zeit.
Hostname verification " bedeutet, dass das cert dient es könnte für eine andere Website auch.
Für den realen Verkehr dieser code bedeutet, dass Ihre Benutzer sind anfällig für man-in-the-middle-Angriffen.