2013-03-23 2 views
1

핸드 쉐이크가 필요합니다. 나는 아래의 코드로 그것을한다.SSLSocketFactory.createSocket은 https 대신 http를 사용하여 연결합니다.

애플릿에서 코드를 실행 중이며 서버에 대해 직접 실행하면 올바르게 작동합니다. 내가 가진 문제는 동일한 코드가 프록시를 통해 실행될 때 발생합니다. 추적 레벨 5가 활성화 된 Java 콘솔을 찾고 있습니다. 코드 라인의 직후에 "SSLSocket socket = (SSLSocket) factory.createSocket ("www.theserver.com ", 443);" 실행 됨 이 줄은 자바 콘솔 "네트워크 : http://www.theserver.com:443 with proxy = DIRECT"에 나타납니다. 그 후에 애플릿이 작동을 멈 춥니 다. 나는 프록시가 포트 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

나는 동일한 대답을 찾고 있다고 생각한다. –

답변

0

나는 이것이 조금 늦다는 것을 알고 있지만, 똑같은 문제가 있었으며 해결할 수있었습니다. 문제는 클라이언트에서 "SSL 2.0 호환 ClientHello 형식 사용"이 Java 제어판의 고급 탭에서 선택되었는지 여부입니다. 클라이언트에서이 상자를 선택 취소하면 올바르게 연결됩니다.

관련 문제