【问题标题】:how to build a web service client through ssl如何通过 ssl 构建 Web 服务客户端
【发布时间】:2014-07-21 10:07:40
【问题描述】:

我是 SSL 和安全的新手,我想为使用 SSL 的 Web 服务构建一个 Java 客户端。服务器已正确配置为使用两种方式的 ssl 配置,但是如何构建客户端..

如果春天有这方面的东西会很好..
提前谢谢

【问题讨论】:

    标签: java ssl webservice-client


    【解决方案1】:

    您不必对客户端做任何特别的事情,只需对您的请求使用 HTTPS 而不是 HTTP。

    【讨论】:

    • 这是真的,除非您使用不在默认 JVM 密钥库中的证书(例如,自签名或由公司特定的 AC 发出)或密钥对,这肯定是这种情况如果 OP 使用 2 路 SSL(据我所知,默认的 JVM 密钥库没有 SSL 客户端身份验证材料)。然后,让事情正常工作可能涉及额外的步骤,例如将证书和密钥添加到默认 JVM 密钥库,或者构建/使用专门配置的 SSLSocketFactory 实例。
    • 我觉得没那么简单,你必须建立一个 ssl 会话并以某种方式向服务器提供你的证书
    • 认证在服务器端配置
    • 在使用 2 路 SSL 时,双方都有一些配置需要提供。客户端和服务器都有一个 keyStore 和一个 trustStore。首先,服务器向客户端公布其在服务器 KeyStore 中找到的证书。客户端 trustStore 用于验证它。其次,客户端发送在客户端密钥库中找到的自己的证书。服务器 TrustStore 用于验证它。 服务器和客户端都需要设置信任和密钥存储,以使 2 路 SSL 握手成功。
    【解决方案2】:

    为了让事情正常工作,你必须创建一个客户端密钥库和信任库,然后用这些存储定义 SSLContext,然后实例化 SSLSocketFactory 以生成如下所示的 SSLSocket:

    SSLContext sslcontext = SSLContexts.createDefault();        
    SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                sslcontext, SSLConnectionSocketFactory.STRICT_HOSTNAME_VERIFIER);
    
    CloseableHttpClient httpClient = HttpClients.custom()
            .setSSLSocketFactory(sslsf)
            .build();    
    HttpsURLConnection.setDefaultSSLSocketFactory(sslcontext.getSocketFactory());
    

    您应该阅读此http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html 以了解其工作原理。
    这个问题how to write java client and server applications that uses mutual ssl authentication between them? 也可能有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 2013-06-28
      • 1970-01-01
      相关资源
      最近更新 更多