【发布时间】:2010-10-27 20:04:33
【问题描述】:
我想调用一个安全的 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)。我尝试过移动一些东西,以便第一次只执行一些命令,但它仍然失败。
我读到了keep-alive,但没有找到任何关于这是什么以及如何使用它的好例子(如果这甚至是一种有效的方式)。如果我通过 HTML、Firefox 或 IE 完成所有这些操作,我猜,浏览器能够缓存证书,所以每次在第一次之后都非常快。我可以模仿一下吗?
【问题讨论】:
标签: java https certificate webservices-client