Verwenden des Android TrustStore für aSmack in Android 4+ (ICS)

Ich bin kein Experte für Keystores und habe Schwierigkeiten, die Nuancen zu verstehen, aber so weit bin ich gekommen:

Beim Erstellen einer xmpp-Verbindung mit dem gefundenen asmack-BuildHier man muss noch den truststore wechseln, der normalerweise so viel sagtQuellen im Web erfolgt mit diesen Befehlen

ConnectionConfiguration config = new ConnectionConfiguration(host, Integer.parseInt(port), service);
config.setTruststorePath("/system/etc/security/cacerts.bks");
config.setTruststorePassword("changeit");
config.setTruststoreType("bks");
XMPPConnection connection = new XMPPConnection(connConfig);
connection.connect();

Dies funktioniert für ältere Android-Versionen, aber unter ICS haben sie einige Dinge geändert und jetzt funktioniert es nicht mehr. Der Pfad ist jetzt anders.

OffenbarDies kann behoben werden aber ich habe keine irdische ahnung wie.

Was natürlich benötigt wird, ist eine Methode, die den Pfad abhängig von der SDK-Version zurückgibt, die den erforderlichen String zum Festlegen des SDK-Pfades zurückgibt, da Sie den Keystore selbst nicht einfach zur xmpp-Verbindung zurückgeben können.

In Bezug aufdiese Diese Methode würde folgendermaßen aussehen:

private String getTrustStorePath() 
{
 String path = System.getProperty("javax.net.ssl.trustStore");

 if (path == null) 
 {
  if ( Build.VERSION.SDK_INT >= 14 ) 
  {
   //THIS IS THE PART I DONT KNOW
   path="";
  }
  else
  {
   path = "/system/etc/security/cacerts.bks";
  }

  return path;
}

Hier Ein Kommentator sagt, dass unter Android "4.x; /etc/security/cacerts.bks durch das Verzeichnis / etc / security / cacerts / ersetzt wurde, das die Zertifikate als einzelne PEM-codierte Dateien enthält." Ich weiß jedoch nicht, welche Relevanz dies hat.

Ich habe auch den Code von zwei Projekten mit xmpp und asmack (gtalksms undYaxim aber nicht gesehen, wie sie dieses Problem vermeiden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage