3

私はキーストアの専門家ではなく、これのニュアンスを理解するのに苦労していますが、これは私が得た範囲です:

ここにある 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 ( gtalksmsyaxim ) を使用する 2 つのプロジェクトのコードもチェックアウトしましたが、この問題を回避する方法がわかりませんでした。

4

2 に答える 2

1

これを試して:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
    connectionConfiguration.setTruststoreType("AndroidCAStore");
    connectionConfiguration.setTruststorePassword(null);
    connectionConfiguration.setTruststorePath(null);
} else {
    connectionConfiguration.setTruststoreType("BKS");
    String path = System.getProperty("javax.net.ssl.trustStore");
    if (path == null)
        path = System.getProperty("java.home") + File.separator + "etc"
            + File.separator + "security" + File.separator
            + "cacerts.bks";
    connectionConfiguration.setTruststorePath(path);
}

https://github.com/Flowdalic/asmack/wiki/Truststoreとhttp://nelenkov.blogspot.com/2011/12/ics-trust-store-implementation.htmlの背景説明を参照してください。

于 2012-08-01T23:14:51.133 に答える
1

ICS のトラスト ストアは、単一の .bks ファイルではなく、/system/etc/security/cacertsディレクトリ内の個別の PEM エンコード ファイルになります。ユーザーが追加した証明書は に配置できます/data/misc/keychain/cacerts-added。詳細については、こちらをご覧ください

証明書ファイルの名前は次のようにする必要があります。subject-hash.Nここで、N は 0 から始まる連続した整数です (通常は 0 ですが、0 が既に使用されている場合は 1 など)。

証明書のサブジェクト ハッシュを取得するには、次のように openssl を使用できます。 openssl x509 -noout -subject_hash_old -in my-cert-file.pem

于 2012-08-26T22:16:41.220 に答える