2016-10-13 3 views
1

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.

Antwort

2

Diese Art von Problem wird oft durch ein fehlendes Kettenzertifikat verursacht. Überprüfen Sie Ihre Website gegen SSLLabs und suchen Sie nach Berichten unvollständiger Kette. Beachten Sie, dass Desktop-Browser wie Chrome möglicherweise weiterhin funktionieren, da sie Kettenzertifikate von früheren Verbindungen zwischenspeichern und manchmal sogar aktiv versuchen, fehlende Kettenzertifikate aus dem Internet abzurufen.

+0

danke dude :) wir sind verwenden Zertifikat pinning. . –

+2

@ 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. –

+0

@ pradeep.k: Wenn das Problem wirklich durch das Pinnen in Ihrer Anwendung verursacht wird, dann ist die Aktualisierung der Anwendung die einzige Wahl. –

Verwandte Themen