我不是密鑰庫的專家,也很難理解的這種細微差別,但是這是我在多大程度上得到:採用了Android信任庫的aSmack在Android 4以上(ICS)
在創建XMPP的使用asmack構建連接發現here一個仍然有改變信任,通常,因此在網絡上說的多sources,使用這些命令
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他們改變完成有些事情,現在它不再了。現在的路徑是不同的。
顯然this can be fixed但我沒有現實的想法如何。
顯然,需要的是一種方法,它返回取決於SDK版本的路徑,該路徑返回所需的字符串以設置sdk路徑,因爲您不能只將密鑰庫本身返回給xmpp連接。
在參考this該方法是這樣的:
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;
}
Here一個評論者說,Android的下「4.x的; /etc/security/cacerts.bks被替換目錄/ etc /安全/ cacerts /包含證書作爲單獨的PEM編碼文件。「然而,我不知道這有什麼相關性,如果有的話。
我還檢查了使用XMPP和asmack(gtalksms和yaxim兩個項目的代碼,但沒有看到他們是如何避免這個問題
我也目前正在調查這一點。我們最近[改變了我們如何檢測GTalkSMS上的信任庫路徑](http://code.google.com/p/gtalksms/source/detail?r=0ce642447febaf596a49a7caf8ffb79701e657ef),因爲它也可以[在這裏看到](https:/ /github.com/Flowdalic/asmack/wiki/Truststore)。但我很肯定,這是不夠的... – Flow