启用S​​SL的主机

时间:2012-06-28 19:13:28

标签: java ssl client host

问题 - 我想连接到启用SSL的服务器主机(已从verisign签署证书)。该主机批准/拒绝付款交易。

假设 - 1.不需要ClientAuth。 2.我没有处理HTTPS

我想编写一个将与此主机连接的Java客户端,并将发送请求和接收响应。如果我的理解不正确,请更正。

  1. Java客户端需要使用包 - 'javax.net.ssl。*'。这个包 有'SSLSocket'类与SSL主机建立连接。
  2. 对于Java客户端'密钥库'/客户端证书(由verisign签名) 不需要。只有在启用clientAuth时才需要它 (TRUE)。
  3. 我是否需要在我的客户端代码中设置首先验证 服务器证书然后传输数据?是这一步 强制性?
  4. 我是否绕过了一些强制性步骤?
  5. 谢谢, Raj Hebbar

2 个答案:

答案 0 :(得分:1)

要创建安全套接字(客户端),您可以使用:

//An SSL socket can't be created from scratch. We need a Factory that
//handles the underlying logic that allows create a SSL socket
SocketFactory socketFactory = SSLSocketFactory.getDefault();

//Get the socket from the Factory
SSLSocket  socket = (SSLSocket) socketFactory.createSocket(host, port);

现在,在运行时,当您创建Java客户端/套接字时,工厂将执行着名的“SSL握手”,并将执行一些验证。默认情况下,java客户端/套接字将:

  • 检查服务器的证书是否与“主机”相对应:每个证书都有一个“服务器名称”,并且只能从该服务器下载此证书。因此,如果您从“www.oracle.com”服务器获得“www.google.com”证书,则此验证将失败。
  • 检查证书是否为可信证书:如果证书未由授权机构签名,或者无法检查授权链,或者是否 未包含在您的“可信证书库”中此验证 会失败。

重要说明:解释主机名检查的第一个要点是错误的:SSLSocket不会发生这种情况,但对于HTTPS客户端则不会。感谢@EJP和@Gergely Szilagyi指出这一点

注意:有一种解决这些验证问题的方法,例如:

  • 要绕过/关闭服务器检查,请阅读此post(不推荐!)
  • 要将证书添加到客户端信任存储库,请检查此post

答案 1 :(得分:0)

  1. 正确。
  2. 正确。
  3. 不,它会自动发生。您可以添加检查证书的握手侦听器,或从SSLSession获取对等证书,但可以在没有它的情况下继续。