2014-04-24 4 views
0

객체 전송을 위해 보안 통신을 사용하는 클라이언트 - 서버 자바 프로그램이 있습니다 (객체 입력 및 출력 스트림 사용). 이 프로그램은 다중 클라이언트 프로그램이며 각 클라이언트에 대해 별도의 스레드가 사용됩니다.SSL 소켓에서 객체 스트림을 사용하는 중에 오류가 발생했습니다.

final static private ServerSocketFactory serverFactory 
    = SSLServerSocketFactory.getDefault(); 
final static private SocketFactory clientFactory = SSLSocketFactory.getDefault(); 
serverSocket 
    = serverFactory.createServerSocket 
     (port, 0, InetAddress.getByName("192.168.1.2")); 
while(running) { 
    clientSocket = serverSocket.accept(); 
    System.out.println("Client connected :: " + clientSocket); 
    System.out.println("Creating client thread..."); 
    Client c = new Client(count++, clientSocket); 
    c.T.start(); 
} 

다음은 클라이언트가 요청 처리 할 스레드 :

Client(int id, Socket cs){ 
    T = new Thread(this, "Client Thread" + id); 
    this.socket = cs; 
    this.id = null; 
    try{ 
     input = new ObjectInputStream(cs.getInputStream()); 
     output = new ObjectOutputStream(cs.getOutputStream()); 
     successful = true; 
    }catch(IOException ex){ 
     successful = false; 
    } 
} 

클라이언트 프로그램의 코드는 매우 유사하다 여기에 아래의 코드 예제이다. 두 프로그램을 모두 실행하고 클라이언트에서 서버로 요청을 보내면 서버가 요청을 수락하지만 소켓에서 객체 스트림을 검색 한 행에 실행이 도달하면 오류가 발생합니다. javax.net. ssl.SSLHandshakeException : 공통 암호 스위트 없음

아무도 도와 줄 수 있습니까? 그리고 Java GUI에서 클라이언트와 서버 간의 보안 통신을 사용하는 더 나은 방법이 있습니까?

+0

사용중인 클라이언트 및 서버 유형은 무엇입니까? JVM 유형, 플랫폼, OS, ... IMHO ObjectStream은 다른 플랫폼간에 종종 호환되지 않는 데이터 객체를 전송할 때 좋지 않습니다. – Robert

+0

나는 그것이 어떤 타입인지 전혀 모른다. (처음으로 클라이언트 - 서버 응용 프로그램에 ** 유형 ** 속성이 있다고 들었음). 이 예외로 이어질 수있는 문제점은 무엇입니까? –

+0

SunJDK, OpenJDK, Android 등 다양한 Java VM이 수십 가지 있습니다. 물론 다른 버전으로도 존재하며 서로 다른 SSL/TLS 암호를 지원합니다. – Robert

답변

3

개체 스트림을 사용할 때 문제가되지 않습니다. 연결을 통해 데이터를 전송하기 전에 SSLHandshakeException이 발생하므로 문제가되지 않습니다. 예외 메시지는 서버와 클라이언트가 동의하는 암호화 방법을 찾는 데 문제가 있음을 나타냅니다. 서버는 한 세트의 암호를 지원하고 클라이언트는 다른 암호 세트를 지원하며 두 세트에 암호가 없습니다. 이것은 예외 메시지가 정확하다고 가정합니다. 때때로이 예외가 다른 SSL 문제의 부작용이 될 수 있습니다.

다음 단계는 클라이언트 및 서버 SSL 소켓 팩토리에서 getDefaultCipherSuites() 및 getSupportedCipherSuites()의 결과를 호출하고 인쇄하는 것입니다. 예외가 정확하다면 기본 암호 그룹간에 겹침이 없어야합니다. 그러나 지원되는 암호 스위트에 일부 중복이 있으면 SSL 소켓 팩토리를 설정하고 사용하도록 설정하십시오.