Ich habe die SSL-Zertifikat-Schlüssel vom Server-Team in Android-Anwendung unter rohen Ordner zur Verfügung gestellt. Es funktionierte zunächst gut.Android ssl cerficatiticate Fehler nach der Erneuerung des Zertifikats in Server mit digicert
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream caInputMmx = new BufferedInputStream(this.getAssets().open("123.crt"));
Certificate caMmx = cf.generateCertificate(caInputMmx);
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("caMmx", caMmx);
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), null);
client.setSslSocketFactory(context.getSocketFactory());
Nach einigen Tagen wurde das Zertifikat abgelaufen und der Server-Team erneuert die certificate.From, dass Zeitpunkt unserer Android-Anwendung arbeitet mit folgenden Ausnahme gestoppt
com.android.volley.NoConnectionError: javax .net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Vertrauensanker für Zertifizierungspfad nicht gefunden.
Bei der Verwendung des neuen erneuerten Zertifikats vom Server funktioniert unsere Anwendung einwandfrei. Gibt es eine Problemumgehung, um dies vom Server zu beheben, anstatt das neue Zertifikat jedes Mal in der Anwendung zu aktualisieren? Denn wenn der Nutzer die Anwendung nicht aktualisiert, wird unsere App nicht funktionieren. Gibt es eine Möglichkeit, dieses Problem zu lösen, anstatt das Zertifikat in der Anwendung jedes Mal zu aktualisieren, wenn das Zertifikat abgelaufen ist?
Edited:
Nach Kommentaren, einige zusätzliche Informationen bereitstellt.
Schlüsselspeicher: Ich verwende Standardschlüsselspeicher. CA: Ich benutze digicert CA.Diese Jungs sind vertrauenswürdig.
danke dude :) wir sind verwenden Zertifikat pinning. . –
@ pradeep.k: Ihr Code zeigt nicht die Validierung, sondern nur das Laden des Zertifikats. Aus dem gezeigten Code ist nicht ersichtlich, dass Sie Pinning verwenden. Auch mit den zusätzlichen Informationen ist nicht klar, ob Sie Pinning zusätzlich zur normalen Validierung oder ausschließlich verwenden. Es ist auch nicht klar, ob Sie das Pinning von Zertifikaten oder das Fixieren von öffentlichen Schlüsseln durchführen und ob das erneuerte Zertifikat denselben öffentlichen Schlüssel verwendet. Wenn Sie ausschließlich Pinning durchführen, müssen Sie das Zertifikat bei Ablauf überhaupt nicht ersetzen. –
@ pradeep.k: Wenn das Problem wirklich durch das Pinnen in Ihrer Anwendung verursacht wird, dann ist die Aktualisierung der Anwendung die einzige Wahl. –