2013-03-23 89 views
1

我需要进行握手。我用下面的代码来做。SSLSocketFactory.createSocket使用http连接而不是https

我正在applet中运行代码,并且在直接对服务器运行时工作正常。当通过代理运行相同的代码时,会出现问题。 我在跟踪级别5激活的Java控制台中查找。直接在代码行“SSLSocket socket =(SSLSocket)factory.createSocket(”www.theserver.com“,443);”被执行 这一行出现在java控制台“网络:连接http://www.theserver.com:443与代理=直接”。在此之后,小程序停止工作。我认为这是因为 代理将不会允许端口443上的http通信。

任何人都可以告诉我为什么它使用http连接,我应该怎么做才能使用https连接?

import javax.net.ssl.HandshakeCompletedEvent; 
import javax.net.ssl.HandshakeCompletedListener; 
import javax.net.ssl.SSLSocket; 
import javax.net.ssl.SSLSocketFactory; 

public class Handshake 
{ 

    class MyHandshakeListener implements HandshakeCompletedListener 
    { 

     public void handshakeCompleted(HandshakeCompletedEvent e) 
     { 
      System.out.println("Handshake succesful!"); 
      System.out.println("Using cipher suite: " + e.getCipherSuite()); 
     } 
    } 

    public void DoHandshake() 
    { 
     try 
     { 
      SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault(); 
      SSLSocket socket = (SSLSocket) factory.createSocket("www.theserver.com", 443); 
      String[] suites = socket.getSupportedCipherSuites(); 
      socket.setEnabledCipherSuites(suites); 
      socket.addHandshakeCompletedListener(new MyHandshakeListener()); 
      socket.startHandshake(); 
     } 
     catch (Exception e) 
     { 
      System.out.println(e); 
     } 

    } 
} 
+0

我想我正在寻找相同的答案。 – 2013-07-26 18:48:50

回答

0

我知道这是有点晚了,但我们有完全相同的问题,只是能解决这个问题。问题出在客户端上,在Java控制面板的高级选项卡上选中了“使用SSL 2.0兼容的ClientHello格式”。在客户端取消选中此框,它将正确连接。

相关问题