私が持っている証明書を使用して、安全な 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を介してこれらすべてを行うと、ブラウザは証明書をキャッシュできると思います。それをどうにかエミュレートできますか?