私はキーストアの専門家ではなく、これのニュアンスを理解するのに苦労していますが、これは私が得た範囲です:
ここにある asmack ビルドを使用して xmpp-connection を作成する場合、トラストストアを変更する必要があります。これは、通常、Web 上の複数のソースなど、これらのコマンドを使用して行われます。
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 の下ではいくつかの変更が行われ、現在は変更されていません。現在のパスは異なります。
どうやらこれは修正できるようですが、どうすればよいかわかりません。
明らかに必要なのは、キーストア自体を xmpp 接続に返すことができないため、sdk パスを設定するために必要な文字列を返す SDK バージョンに応じてパスを返すメソッドです。
これを参照すると、そのメソッドは次のようになります。
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 は、証明書を個別の PEM エンコード ファイルとして含むディレクトリ /etc/security/cacerts/ に置き換えられた」と述べています。ただし、これがどのような関連性があるかはわかりません。
xmpp と asmack ( gtalksmsとyaxim ) を使用する 2 つのプロジェクトのコードもチェックアウトしましたが、この問題を回避する方法がわかりませんでした。