2013-03-23 88 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格式」。在客戶端取消選中此框,它將正確連接。

相關問題