1

私が持っている証明書を使用して、安全な Web サービスを呼び出したい... サーバーが証明書で認証するのに長い時間がかかります。同じ「セッション」)、接続を再利用できるはずだと感じています。

次のコードがあります。

System.setProperty("javax.net.ssl.trustStorePassword", "");
System.setProperty("javax.net.ssl.trustStore", "trusted.cacerts");
System.setProperty("javax.net.ssl.keyStorePassword", "mypassword");
System.setProperty("javax.net.ssl.keyStore", "trusted.clientcerts");

URL url = new URL("https://remoteserver:8443/testservice");
HttpsURLConnection connection = (HttpsURLConnection)url.openConnection();
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "text/xml");
connection.setDoOutput(true);
OutputStream os = connection.getOutputStream();
os.write(bytes);

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}

connection.disconnect();

これはうまく機能します...しかし遅いです。認証だけで約10秒かかります。この内部認証はここでは一般的であり、高速化することはできません。でもなんとか再利用できないかな?
このコードの周りに、url.connectionと切断の間にループを配置しようとしましたが、何度でも思い出すことができると思っていましたが、失敗しました (500)。最初にコマンドの一部のみを実行するために、少し移動しようとしましたが、それでも失敗します。
キープアライブについて読みましたが、これが何であるか、およびその使用方法の良い例は見つかりませんでした (それが有効な方法でさえある場合)。HTML、Firefox、またはIEを介してこれらすべてを行うと、ブラウザは証明書をキャッシュできると思います。それをどうにかエミュレートできますか?

4

2 に答える 2

1

より良い代替手段は、HttpClient とその接続プーリング メカニズムを使用することです。httpsキープアライブが役立つかどうかも確認してください

于 2010-10-27T20:34:20.470 に答える
0

電話をかけないようにしてくださいconnection.disconnect()...あなたがそうする必要はないと思います。ただし、使いreader終わったら必ず閉じる必要があります。

于 2010-10-27T20:29:20.783 に答える