【问题标题】:What kind of SSL implementation do I go for?我选择哪种 SSL 实现?
【发布时间】:2011-08-23 08:36:58
【问题描述】:

我目前正在测试 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 自动化整个密钥存储添加功能吗?

您的意见将不胜感激。谢谢。

【问题讨论】:

    标签: java ssl html-components jsse


    【解决方案1】:

    你不应该这样做。已有解决方案。

    From the docs:

    我们的中有几个自定义套接字工厂可用 贡献包。对于那些寻求 根据特定需求定制 HTTPS 协议的行为 他们的应用:

    • EasySSLProtocolSocketFactory 可用于创建 SSL 允许目标服务器进行身份验证的连接 自签名证书。

    • StrictSSLProtocolSocketFactory 可用于创建 SSL 可以选择执行主机名验证的连接 以帮助防止中间人类型的攻击。

    • AuthSSLProtocolSocketFactory 可用于选择性地强制执行 相互客户端/服务器身份验证。这是最灵活的 协议套接字工厂的实现。它允许 自定义 SSL 身份验证的大部分(如果不是全部)方面。

    【讨论】:

    • 嗯,据我所知,我不需要任何 SSL 自定义。当我尝试使用开箱即用的 HTTPClient 时,我得到的唯一错误是“无法找到请求目标的有效证书路径”,我通过将服务器证书作为 Java 密钥存储的一部分解决了这个错误。那么这个实现对我来说是最好的选择吗?
    【解决方案2】:

    我在 java 领域遇到了两种不同的 SSL 实现。

    不,你没有。您遇到了内置的 JSSE 和 Apache 围绕它构建的一些东西。例如,消息“无法找到请求目标的有效认证路径”来自 JSSE,实际上来自 JCE。

    据我所知,JSSE 本身的唯一其他实现是在 IBM JVM 中。

    【讨论】:

      猜你喜欢
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 2016-03-17
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      相关资源
      最近更新 更多