我目前正在测试 SSL 的水域,并且是 SSL 的新手。作为我研究的一部分,我在 Java 领域遇到了 SSL 的两种不同实现。
首先说一下我的需求,很简单,我只需要一个流程来使用 https 将数据发布到 URL 中。
在这两种解决方案中,第一种是纯Java实现(仅使用核心Java类),另一种使用Apache HTTPClient来做http。
最初,作为我测试的一部分,我会得到臭名昭著的“无法找到请求目标的有效证书路径”异常,我认为当证书(从服务器接收)不是 Java 密钥存储的一部分时会发生这种情况。将证书添加到 Java 密钥库后,应用程序在这两种情况下都可以正常工作。然而,在我使用 HTTPClient 的过程中,我注意到了 SSLSocketFactory 的使用。
当我使用以下代码测试 HttpClient 时,
HttpClient httpClient = new HttpClient();
PostMethod postMethod = new PostMethod(target);
postMethod.setQueryString("someQueryString");
try {
httpClient.executeMethod(postMethod);
System.out.println("Response code: " + postMethod.getStatusLine());
BufferedReader in = new BufferedReader (new InputStreamReader(postMethod.getResponseBodyAsStream()));
String temp;
while ((temp = in.readLine()) != null){
response += temp + "\n";
}
temp = null;
in.close ();
System.out.println("Server response:\n'" + response + "'");
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
postMethod.releaseConnection();
}
它工作得很好,所以我不确定 SSLSocketFactory 实现的用途是什么?当我们想要自动将证书添加到密钥库时,我最初认为这很有用。我的分析正确吗?
如果我的分析是正确的,哪个实现更好?
- 手动安装证书会更好吗?这种方法有什么缺点?证书会过期吗?如果是这样,我是否必须再次安装新证书?
- 或者我应该使用 SSLSocketFactory 自动化整个密钥存储添加功能吗?
您的意见将不胜感激。谢谢你。