Использование Android TrustStore для aSmack в Android 4+ (ICS)
Я не эксперт по магазинам ключей, и мне трудно понять нюансы этого, но вот как далеко я получил:
При создании xmpp-соединения с использованием найденной сборки asmackВот Еще нужно изменить склад доверенных сертификатов, который обычно, так сказать, несколькоисточники в Интернете, делается с помощью этих команд
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();
Это работает найти для более старых версий Android, но под ICS они изменили некоторые вещи, и теперь это не так. Путь теперь другой.
По-видимомуэто можно исправить но я понятия не имею, как.
Очевидно, что нужен метод, который возвращает путь в зависимости от версии SDK, который возвращает необходимую строку для установки sdk-пути, поскольку вы не можете просто вернуть само хранилище ключей в xmpp-соединение.
Что касаетсяэтот этот метод будет выглядеть так:
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;
}
Вот комментатор говорит, что под Android "4.x; /etc/security/cacerts.bks был заменен каталогом / etc / security / cacerts /, содержащим сертификаты в виде отдельных файлов в кодировке PEM. & quot; Тем не менее, я не знаю, какое значение имеет, если таковые имеются, это имеет.
Я также проверил код двух проектов с использованием xmpp и asmack (gtalksms а такжеyaxim но не видел, как они избегают этой проблемы.