1

最近、Google の Cloud Messaging for Android を知り、自分のアプリを統合して使用したいと考えました。プロジェクトの Android 側が機能し、アプリがサーバーに正しく登録されています。問題は、サーバーが GCM サーバーを認証できないように見えるため、GCM サーバーと通信できないことです。これが私が意味することです:

現在、私のサーバーは、キーストアとトラストストアを備えた単純な Java ベースの SSL サーバーです。トラストストアにはクライアントのキー (つまりアプリのキー) が含まれており、その逆も同様であり、クライアント/サーバーは SSL を介して問題なく相互に通信できます。アプリにメッセージを送信するために使用しているコードは次のとおりです。

Sender sender = new Sender( "API_KEY" );
Message message = new Message.Builder().addData( "message", description ).build();
Result result = sender.send( message, ID, 1 );

次の例外が発生します。

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

サーバーを起動するときに、トラスト/キーストアの名前とそれらのパスワードを渡してロードし、クライアントとの通信に使用できるようにします。問題は、現在トラストストアにクライアントのキーしか含まれていないため、サーバーはクライアントとのみ通信でき、他の誰とも通信できないことが問題であると思われます。これは正しいですか?もしそうなら、GCM証明書をトラストストアなどに追加する方法を知っている人はいますか?

どうもありがとう、どんな助けも大歓迎です:)

PSサーバーにトラストストアをロードする前に、クライアントにメッセージを送信しようとしましたが、アプリはそれを正常に受信しました。

4

4 に答える 4

2

Google Cloud Messaging を使用すると、サーバーはクライアントと直接通信しません。最初に「クラウド」の部分を通過します。したがって、クライアント証明書をサーバーのトラスト マネージャーに配置しても機能しません。

代わりに、サーバーは Google のクラウド メッセージング サーバーの SSL 証明書を検証する必要があります。これらは、オペレーティング システムのデフォルトの CA リストに既に含まれている認証局によってサポートされているため、トラスト ストアを追加する前にクライアントにメッセージを送信しても問題ありません。

于 2012-09-02T05:14:54.367 に答える
1

理解した。kroot が示唆したように、証明書がトラストストアにないため、サーバーが GCM サーバーを認証できなかったことが問題でした (システムのトラスト ストアではなく、独自のトラスト ストアを使用していました)。そのため、Java セキュリティ フォルダから cacerts ファイルをコピーし、そこに Android アプリ用のカスタム クライアント証明書を追加し、システムのデフォルトの信頼証明書が既にあるため、そのファイルを信頼ストアとして使用することで、これを変更しました。簡単でしたが、理解するのに半日ほどかかりました。

于 2012-09-02T10:28:58.310 に答える
0

「サーバー」として機能し、メッセージをGCMサーバーにプッシュして、ハンドセットアプリにメッセージを配信できるスタンドアロンのJavaプログラムを作成しました。

出荷された信頼できるエントリは GCM サーバーに接続するのに十分であるため、jre\lib\security\cacerts ファイルに証明書をインストールする必要はありませんでした。

唯一の依存関係は次のとおりです

    <dependency>
        <groupId>com.google</groupId>
        <artifactId>gcm-server</artifactId>
        <version>1.0.1</version>
    </dependency>
    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1.1</version>
    </dependency>
于 2015-09-14T15:15:38.990 に答える
0

サーバーの trustStore がクライアントの証明書を信頼していません。内容を確認し、実際にその trustStore を使用していることを確認してください。

于 2012-09-02T01:41:31.230 に答える