2

SMS ゲートウェイに接続したい。次のコードを見つけました。

public void smsSender(String username, String password, String to,
        String text) throws IOException {

    try {
        String data = "username=" + username + "&password=" + password
                + "&to=" + to + "&text=" + text;

        URL url = new URL("https://sendsms.abc.com:1010/sms.php");

        HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
        urlc.setRequestMethod("POST");
        urlc.setDoOutput(true);
        urlc.setRequestProperty("Content-type",
                "application/x-www-form-urlencoded");

        BufferedWriter br = new BufferedWriter(new OutputStreamWriter(
                urlc.getOutputStream()));

        br.write(data);
        br.flush();

        BufferedReader rd = new BufferedReader(new InputStreamReader(
                urlc.getInputStream()));
        String line;
        while (null != ((line = rd.readLine()))) {
            output = line;
            System.out.println(output);
        }

        rd.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

このメソッドを使用して接続しようとすると、Eclipse からエラー メッセージが送信されます。

要求されたターゲットへの有効な証明書パスが見つかりません

アクセスしようとしているサーバーは、自己署名証明書を使用しています。私はこの分野に不慣れです。どうすればこの問題を解決できますか。前もって感謝します :)

4

1 に答える 1

2

SSL 経由でリモート メソッド呼び出しを行うには、クライアントはサーバーの証明書を信頼する必要があります。サーバーには自己署名証明書があると言ったように、証明書を信頼するようにクライアントを明示的に構成する必要があります。そうしないと、接続が失敗します。クライアントとサーバーの自己署名証明書の間に信頼関係を作成するには、以下の手順に従います。

  1. まず、クライアント側でサーバー証明書を取得する必要があります。
    そのために私が知っている方法は、つまり、ブラウザでサーバーの URL にアクセスし、サーバーの証明書を取得してブラウザにインポートすることです。サーバー証明書を取得する方法は他にもあるかもしれませんが、調べる必要があります。

  2. ここで、公開鍵を証明書としてブラウザーからクライアントにエクスポートします。server.cer にします。

  3. ここで、クライアント キーストアを作成します

    keytool -genkey -alias clientkeys -keyalg RSA -keystore client.keystore -storepass 123456 -keypass 123456 -dname "CN=localhost, OU=MYOU, O=MYORG, L=MYCITY, S=MYSTATE, C=MY"

  4. クライアント証明書を作成する

    keytool -export -alias clientkeys -keystore client.keystore -storepass 123456 -file client.cer

  5. ここで、サーバー証明書をクライアントのトラスト ストアにインポートします。

    keytool -import -alias serverCert -keystore client.truststore -storepass clientcert -file server.cer

  6. Werner が提供するリンクの erickson のコメントに記載されているように、クライアント キーストアをロードします。

まだ明確でない場合はお知らせください。ただし、クライアントとサーバー間の SSL ハンドシェイクに関連する Google のドキュメントを読むことをお勧めします。

于 2012-10-22T17:07:51.013 に答える