Korzystanie z Android TrustStore dla aSmack w Androidzie 4+ (ICS)
Nie jestem ekspertem od magazynów kluczy i trudno mi zrozumieć niuanse tego, ale tak daleko mam:
Podczas tworzenia połączenia xmpp przy użyciu znalezionej kompilacji asmacktutaj nadal trzeba zmienić magazyn zaufanych certyfikatów, który zwykle, jak powiada, jest wielokrotnyźródła w sieci odbywa się za pomocą tych poleceń
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();
Działa to w przypadku starszych wersji Androida, ale w ICS zmieniły niektóre rzeczy, a teraz już nie. Ścieżka jest teraz inna.
Widoczniemożna to naprawić ale nie mam ziemskiego pomysłu.
Potrzebna jest oczywiście metoda zwracająca ścieżkę w zależności od wersji SDK, która zwraca wymagany ciąg znaków, aby ustawić ścieżkę sdk, ponieważ nie można po prostu zwrócić samego magazynu kluczy do połączenia xmpp.
W odniesieniu doto ta metoda wyglądałaby tak:
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;
}
Tutaj komentator mówi, że pod Androidem 4.x; /etc/security/cacerts.bks zastąpiono katalogiem / etc / security / cacerts / zawierającym certyfikaty jako pojedyncze pliki zakodowane PEM. " nie wiem jednak, jakie to ma znaczenie, jeśli w ogóle.
Sprawdziłem również kod dwóch projektów używając xmpp i asmack (gtalksms iyaxim ale nie widziałem, jak unikają tego problemu.