8

Google クラウド メッセージ サーバー経由で Android デバイスにプッシュ通知を送信しようとしています。

そのために使用する URL は次のとおりです。

https://android.googleapis.com/gcm/send

私たちのエンタープライズ アプリケーションでは、デフォルトの CA 機関を使用せず、SSLContext プロパティによってロードされるトラストストア ファイルに、セキュリティ上の理由から信頼する各エンティティを手動で追加します。トラストストアに GCM 証明書を追加したいと考えています。

その URL から証明書を取得する方法がわかりません。ページが別の非 SSL ページにリダイレクトされるため、Chrome/Firefox のエクスポート方法が機能していないようです。

誰かが解決策を持っていますか?

4

3 に答える 3

14

次の Java コードを使用して証明書を保存できました。

public void testConnectionTo(String aURL) throws Exception {
        URL destinationURL = new URL(aURL);
        HttpsURLConnection conn = (HttpsURLConnection) destinationURL.openConnection();
        conn.connect();
        Certificate[] certs = conn.getServerCertificates();
        System.out.println("nb = " + certs.length);
        int i = 1;
        for (Certificate cert : certs) {
            System.out.println("");
            System.out.println("");
            System.out.println("");
            System.out.println("################################################################");
            System.out.println("");
            System.out.println("");
            System.out.println("");
            System.out.println("Certificate is: " + cert);
            if(cert instanceof X509Certificate) {
                try {
                    ( (X509Certificate) cert).checkValidity();
                    System.out.println("Certificate is active for current date");
                    FileOutputStream os = new FileOutputStream("/home/sebastien/Bureau/myCert"+i);
                    i++;
                    os.write(cert.getEncoded());
                } catch(CertificateExpiredException cee) {
                    System.out.println("Certificate is expired");
                }
            } else {
                System.err.println("Unknown certificate type: " + cert);
            }
        }
    }

それらをトラストストアにインポートします。

keytool -import -alias GoogleInternetAuthority -file myCert1 -keystore truststore
于 2012-09-21T10:48:45.013 に答える
11

openssl をお持ちの場合は、使用できます

openssl s_client -connect android.googleapis.com:443

s_client「SSL/TLSを使用してリモートホストに接続する汎用SSL/TLSクライアント」であり、とりわけ、リモートサーバーから受信したサーバー証明書を出力します。これは HTTP クライアントではないため、301 リダイレクトに従うことを認識せず、最初に接続したサーバーの証明書を提供するだけです。

于 2012-09-21T10:12:02.150 に答える
3

ポーテクルを使用。ターゲット キー ストアを開き、Examine>を使用Examine SSL/TLS Connectionして入力android.googleapis.com443、完了です。

于 2012-09-21T10:42:52.133 に答える