スマックXMPPライブラリを使用してSSL接続を作成するには?

StackOverflow https://stackoverflow.com/questions/545082

  •  23-08-2019
  •  | 
  •  

質問

私はXMPPクライアントとして動作する小さなプログラムを構築していると私は のライブラリをピシャリ。さて、私が接続していますサーバーは、(ピジンに私は「古い(ポート5223)SSLを強制」をチェックしなければならない)SSLが必要です。私は悩み、このサーバーに接続するために、スマックきを抱えています。それは可能でしょうか?

役に立ちましたか?

解決

このスレッドを見てみましょう。

http://www.igniterealtime.org/community/thread/37678する

基本的に、あなたのコードに次の2行を追加する必要があります:

connConfig.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
connConfig.setSocketFactory(new DummySSLSocketFactory());

connConfigは、あなたのConnectionConfigurationオブジェクトです。スパークソースコードリポジトリからDummySSLSocketFactoryを取得します。それがないすべては、事実上すべての証明書を受け入れています。これは私のために働くように見えました。幸運!

他のヒント

あなたは以下のことで、これを達成することができます:

を保存するキーストアにCA証明書

キーストアに証明書を保存するには次の手順に従います。

ステップ1:のはBouncyCastle JARファイルをダウンロードします。これは、ここからダウンロードすることができます:弾む城JAVAは、

リリース

ステップ2:のキーストア内の証明書を保存するには、次のコマンドを使用します。

keytool -importcert -v -trustcacerts -file "<certificate_file_with_path>" -alias "<some_name_for_certificate>" -keystore "<file_name_for_the_output_keystore>" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "<bouncy_castle_jar_file_with_path>" -storetype BKS -storepass "<password_for_the_keystore>"

ステップ3:のキーストアファイルを確認してください。

keytool -importcert -v -list -keystore "<file_name_for_the_keystore_with_path>" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "<bouncy_castle_jar_file_with_path>" -storetype BKS -storepass "<password_for_the_keystore>"

これは私たちに、キーストアに含まれた証明書を列挙しなければならない。

私たちは、我々のコードで使用できるキーストアを持っています。

をキーストアを使用する

このキーストアを生成した後、あなたのアプリケーションの生のフォルダに保存します。 openfireサーバーで証明書ハンドシェイクを取得するために以下のコードを使用します。

XMPPを使用してopenfireとの接続を作成するには、設定を取得する必要があるかもしれません。同じのために、以下のメソッドを使用します:

public ConnectionConfiguration getConfigForXMPPCon(Context context) {
        ConnectionConfiguration config = new ConnectionConfiguration(URLConstants.XMPP_HOST, URLConstants.XMPP_PORT);
        config.setSASLAuthenticationEnabled(false);
        config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
        config.setCompressionEnabled(false);
        SSLContext sslContext = null;
        try {
            sslContext = createSSLContext(context);
        } catch (KeyStoreException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (CertificateException e) {
            e.printStackTrace();
        }

        config.setCustomSSLContext(sslContext);
        config.setSocketFactory(sslContext.getSocketFactory());

        return config;
 }

private SSLContext createSSLContext(Context context) throws KeyStoreException,
            NoSuchAlgorithmException, KeyManagementException, IOException, CertificateException {
        KeyStore trustStore;
        InputStream in = null;
        trustStore = KeyStore.getInstance("BKS");

        if (StringConstants.DEV_SERVER_IP.equals(URLConstants.XMPP_HOST) || StringConstants.TEST_SERVER_IP.equals(URLConstants.XMPP_HOST))
            in = context.getResources().openRawResource(R.raw.ssl_keystore_dev_test);
        else if(StringConstants.STAGE_SERVER_IP.equals(URLConstants.XMPP_HOST) || StringConstants.STAGE2_SERVER_IP.equals(URLConstants.XMPP_HOST))
            in = context.getResources().openRawResource(R.raw.ssl_keystore_stage);
        else if(StringConstants.PROD_SERVER_IP.equals(URLConstants.XMPP_HOST) || StringConstants.PROD1_SERVER_IP.equals(URLConstants.XMPP_HOST))
            in = context.getResources().openRawResource(R.raw.ssl_keystore_prod);

        trustStore.load(in, "<keystore_password>".toCharArray());

        TrustManagerFactory trustManagerFactory = TrustManagerFactory
                .getInstance(KeyManagerFactory.getDefaultAlgorithm());
        trustManagerFactory.init(trustStore);
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, trustManagerFactory.getTrustManagers(),
                new SecureRandom());
        return sslContext;
}

すべて行って..!ちょうど今、あなたの接続が確保されている...接続します。

すべてので私のブログで同じに従ってくださいsmackssl.blogspot.inする

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top