JavaTM Platform
Standard Ed. 6

javax.net.ssl
클래스 SSLSocket

java.lang.Object 
  상위를 확장 java.net.Socket 
      상위를 확장 javax.net.ssl.SSLSocket


public abstract class SSLSocket
extends Socket

이 클래스는 Socket 를 확장해, Secure Sockets Layer (SSL)나 IETF Transport Layer Security (TLS)등의 프로토콜을 사용하는 시큐어 소켓을 제공합니다.  

이러한 소켓은, 일반적으로의 스트림 소켓입니다만, TCP 등의 기본이 되는 네트워크 트랜스폴트 프로토콜상에 시큐리티 보호층을 추가합니다. 다음의 시큐리티 보호를 합니다.

이러한 시큐리티 보호는, 「암호화 방식군」을 사용해 지정합니다. 암호화 방식군은, 지정된 SSL 접속으로 사용되는 암호화 알고리즘의 편성입니다. 협상을 실시하려면 , 2 개의 끝이 같은 암호화 방식군을 선택해, 그 암호화 방식군이 양쪽 모두의 환경에서 사용 가능하지 않으면 안됩니다. 공통의 암호화 방식군이 없는 경우는, SSL 접속을 확립하지 못하고, 데이터를 교환할 수 없습니다.

사용되는 암호화 방식군은, 「핸드 쉐이크」라고 불리는 협상 프로세스에 의해 확립됩니다. 핸드 쉐이크에서는, 세션의 작성 또는 참가를 합니다. 작성 또는 참가한 세션은, 무효가 될 때까지 다양한 접속을 보호합니다. 핸드 쉐이크가 완료하면(자),getSession 메소드를 사용해 세션 속성에 액세스 할 수 있습니다. 접속의 최초의 핸드 쉐이크는, 다음의 몇개의 방법으로 개시할 수 있습니다.

하등의 이유로써 핸드 쉐이크가 실패했을 경우,SSLSocket 가 닫아 통신할 수 없게 됩니다.

암호화 방식군을 사용할 때는, 2 개의 그룹에 대해 이해할 필요가 있습니다.

디폴트의 구현으로 사용 가능하게 하는 암호화 방식군에서는, 서버를 인증해, 기밀성이 보증되지 않으면 안됩니다. 서버 인증을 하지 않고 기밀성이 보증되지 않는 암호화 방식군을 선택하는 경우는, 서버 인증을 하지 않고 비공개성이 보증되지 않는 (암호화되지 않는다) 통신이 사용되는 것에 2 개의 끝이 명시적으로 동의 할 필요가 있습니다.

SSLSocket 가 최초로 작성될 때는, 핸드 쉐이크는 행해지지 않습니다. 이 때문에, 사용하는 암호화 방식군이나 소켓 모드 (클라이언트 모드 또는 서버 모드)등의 통신 설정은, 어플리케이션으로부터 실시합니다. 다만, 그 접속을 사용해 어플리케이션 데이터를 송신할 때는, 항상 시큐리티가 보증됩니다.

핸드 쉐이크의 완료를 전하는 이벤트 통지를 수신하는 설정으로 할 수 있습니다. 이 경우, 2 개의 추가 클래스를 이용할 필요가 있습니다. HandshakeCompletedEvent 객체는, 이 API 의 사용자에 의해 등록된 HandshakeCompletedListener 인스턴스에게 건네집니다. SSLSocket 는,SSLSocketFactory 에 의해 작성됩니다. 이 외 ,SSLServerSocket 로부터의 접속을 받아들였을 경우에도 작성됩니다.

SSL 소켓의 동작에는, 클라이언트 모드 또는 서버 모드가 있습니다. 핸드 쉐이크 프로세스를 개시하는 피어, 및 각 피어로부터 송신되는 메세지는, 모드에 의해 정해집니다. 다만, 접속에는, 클라이언트와 서버가 1 개씩 필요합니다. 이 요건을 채우지 않은 경우, 핸드 쉐이크는 올바르게 행해지지 않습니다. 최초의 핸드 쉐이크가 개시되고 나서는, 협상을 다시 하는 경우여도, 클라이언트 모드와 서버 모드를 바꿀 수 없습니다.

도입된 버젼:
1.4
관련 항목:
Socket , SSLServerSocket , SSLSocketFactory

생성자 의 개요
protected SSLSocket ()
          서브 클래스에서만 사용됩니다.
protected SSLSocket (InetAddress  address, int port)
          서브 클래스에서만 사용됩니다.
protected SSLSocket (InetAddress  address, int port, InetAddress  clientAddress, int clientPort)
          서브 클래스에서만 사용됩니다.
protected SSLSocket (String  host, int port)
          서브 클래스에서만 사용됩니다.
protected SSLSocket (String  host, int port, InetAddress  clientAddress, int clientPort)
          서브 클래스에서만 사용됩니다.
 
메소드의 개요
abstract  void addHandshakeCompletedListener (HandshakeCompletedListener  listener)
          이 접속의 SSL 핸드 쉐이크의 완료 통지를 받기 위한 이벤트 청취자를 등록합니다.
abstract  String [] getEnabledCipherSuites ()
          이 접속으로 현재 사용 가능하게 되어 있는 SSL 암호화 방식군의 이름을 돌려줍니다.
abstract  String [] getEnabledProtocols ()
          이 접속에 대해서 현재 사용 가능하게 되어 있는 프로토콜의 이름을 돌려줍니다.
abstract  boolean getEnableSessionCreation ()
          이 소켓으로 새로운 SSL 세션을 확립할 수 있는 경우는 true 를 돌려줍니다.
abstract  boolean getNeedClientAuth ()
          이 소켓에 클라이언트 인증이 필수인경우는 true 를 돌려줍니다.
abstract  SSLSession getSession ()
          이 접속으로 사용되고 있는 SSL 세션을 돌려줍니다.
 SSLParameters getSSLParameters ()
          이 SSLSocket 로 유효한 SSLParameters 를 돌려줍니다.
abstract  String [] getSupportedCipherSuites ()
          이 접속으로 사용 가능하게 할 수 있는 암호화 방식군의 이름을 돌려줍니다.
abstract  String [] getSupportedProtocols ()
          SSL 접속으로 사용 가능하게 할 수 있는 프로토콜의 이름을 돌려줍니다.
abstract  boolean getUseClientMode ()
          핸드 쉐이크시에 클라이언트 모드를 사용하도록(듯이) 소켓이 설정되어 있는 경우는 true.
abstract  boolean getWantClientAuth ()
          이 소켓이 클라이언트 인증을 요구하는 경우는, true 를 돌려줍니다.
abstract  void removeHandshakeCompletedListener (HandshakeCompletedListener  listener)
          이전에 등록된 핸드 쉐이크 완료 청취자를 삭제합니다.
abstract  void setEnabledCipherSuites (String [] suites)
          이 접속으로 사용 가능한 암호화 방식군을 설정합니다.
abstract  void setEnabledProtocols (String [] protocols)
          이 접속으로 사용 가능한 프로토콜의 버젼을 설정합니다.
abstract  void setEnableSessionCreation (boolean flag)
          이 소켓으로 새로운 SSL 세션을 확립할 수 있을지 어떨지를 제어합니다.
abstract  void setNeedClientAuth (boolean need)
          클라이언트 인증을 요구하도록(듯이) 소켓을 설정합니다.
 void setSSLParameters (SSLParameters  params)
          이 소켓에 SSLParameters 를 적용합니다.
abstract  void setUseClientMode (boolean mode)
          핸드 쉐이크시, 소켓이 클라이언트 (또는 서버) 모드를 사용하도록(듯이) 설정합니다.
abstract  void setWantClientAuth (boolean want)
          클라이언트 인증을 요구하도록(듯이) 소켓을 설정합니다.
abstract  void startHandshake ()
          이 접속상에서 SSL 핸드 쉐이크를 개시합니다.
 
클래스 java.net. Socket 로부터 상속된 메소드
bind , close , connect , connect , getChannel , getInetAddress , getInputStream , getKeepAlive , getLocalAddress , getLocalPort , getLocalSocketAddress , getOOBInline , getOutputStream , getPort , getReceiveBufferSize , getRemoteSocketAddress , getReuseAddress , getSendBufferSize , getSoLinger , getSoTimeout , getTcpNoDelay , getTrafficClass , isBound , isClosed , isConnected , isInputShutdown , isOutputShutdown , sendUrgentData , setKeepAlive , setOOBInline , setPerformancePreferences , setReceiveBufferSize , setReuseAddress , setSendBufferSize , setSocketImplFactory , setSoLinger , setSoTimeout , setTcpNoDelay , setTrafficClass , shutdownInput , shutdownOutput , toString
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , wait , wait , wait
 

생성자 의 상세

SSLSocket

protected SSLSocket()
서브 클래스에서만 사용됩니다. 초기화되어 있지 않은 미접속의 TCP 소켓을 작성합니다.


SSLSocket

protected SSLSocket(String  host,
                    int port)
             throws IOException ,
                    UnknownHostException 
서브 클래스에서만 사용됩니다. 지정된 포트의 지명된 호스트에 대한 TCP 접속을 작성합니다. 이 소켓은, SSL 클라이언트로서 동작합니다.

파라미터:
host - 접속하는 호스트의 이름
port - 서버의 포트 번호
예외:
IOException - 소켓의 작성중에 입출력 에러가 발생했을 경우
UnknownHostException - 호스트가 불명의 경우

SSLSocket

protected SSLSocket(InetAddress  address,
                    int port)
             throws IOException 
서브 클래스에서만 사용됩니다. 지정된 주소와 포트의 서버에 대한 TCP 접속을 작성합니다. 이 소켓은, SSL 클라이언트로서 동작합니다.

파라미터:
address - 서버의 호스트
port - 포트
예외:
IOException - 소켓의 작성중에 입출력 에러가 발생했을 경우

SSLSocket

protected SSLSocket(String  host,
                    int port,
                    InetAddress  clientAddress,
                    int clientPort)
             throws IOException ,
                    UnknownHostException 
서브 클래스에서만 사용됩니다. 지정된 포트의 지명된 호스트에 대한 SSL 접속을 작성합니다. 접속의 클라이언트측은, 지정된 주소와 포트에 바인드 됩니다. 이 소켓은, SSL 클라이언트로서 동작합니다.

파라미터:
host - 접속하는 호스트의 이름
port - 서버의 포트 번호
clientAddress - 클라이언트의 호스트
clientPort - 클라이언트의 포트 번호
예외:
IOException - 소켓의 작성중에 입출력 에러가 발생했을 경우
UnknownHostException - 호스트가 불명의 경우

SSLSocket

protected SSLSocket(InetAddress  address,
                    int port,
                    InetAddress  clientAddress,
                    int clientPort)
             throws IOException 
서브 클래스에서만 사용됩니다. 지정된 주소와 TCP 포트의 서버에 대한 SSL 접속을 작성합니다. 접속의 클라이언트측은, 지정된 주소와 포트에 바인드 됩니다. 이 소켓은, SSL 클라이언트로서 동작합니다.

파라미터:
address - 서버의 호스트
port - 포트
clientAddress - 클라이언트의 호스트
clientPort - 클라이언트의 포트 번호
예외:
IOException - 소켓의 작성중에 입출력 에러가 발생했을 경우
메소드의 상세

getSupportedCipherSuites

public abstract String [] getSupportedCipherSuites()
이 접속으로 사용 가능하게 할 수 있는 암호화 방식군의 이름을 돌려줍니다. 일반적으로은, 그 일부만이 디폴트로 사용 가능하게 됩니다. 디폴트의 서비스 품질 요건을 채우지 않은 암호화 방식군은, 사용 불가가 됩니다. 이러한 암호화 방식군은, 특수한 어플리케이션으로 사용됩니다.

반환값:
암호화 방식군명의 배열
관련 항목:
getEnabledCipherSuites() , setEnabledCipherSuites(String [])

getEnabledCipherSuites

public abstract String [] getEnabledCipherSuites()
이 접속으로 현재 사용 가능하게 되어 있는 SSL 암호화 방식군의 이름을 돌려줍니다. SSL 소켓이 최초로 작성되었을 때에, 사용 가능하게는 모든 암호화 방식군으로, 최소한의 서비스 품질이 보증됩니다. 환경에 따라서는, 이 값은 빈 상태(empty)의 경우도 있습니다.  

암호화 방식군은, 비록 유효해도 사용되지 않는 것이 있습니다. 예를 들어, 피어가 암호화 방식군을 지원하지 않는 경우, 이 encode에 필요한 증명서 ( 및 비공개키)를 사용할 수가 없는 경우, 또는, 익명의 암호화 방식군이 이용 가능해도 인증이 요구되는 경우 등입니다.

반환값:
암호화 방식군명의 배열
관련 항목:
getSupportedCipherSuites() , setEnabledCipherSuites(String [])

setEnabledCipherSuites

public abstract void setEnabledCipherSuites(String [] suites)
이 접속으로 사용 가능한 암호화 방식군을 설정합니다.  

suites 파라미터로 지정된 각 암호화 방식군은, getSupportedCipherSuites()로 리스트되어 있지 않으면 안됩니다. 그렇지 않은 경우, 메소드는 실패합니다. 이 메소드의 호출이 정상적으로 행해졌을 때,suites 파라미터에 리스트 된 암호화 방식군만, 사용할 수가 있습니다.  

왜 특정의 암호화 방식군을 접속으로 사용할 수가 없는 것처럼 붙어서는,getEnabledCipherSuites() 를 참조해 주세요.

파라미터:
suites - 사용 가능하게 하는 모든 암호화 방식군의 이름
예외:
IllegalArgumentException - 파라미터로 지정된 암호화 방식군의 일부가 지원되지 않는 경우, 또는 파라미터가 null 의 경우.
관련 항목:
getSupportedCipherSuites() , getEnabledCipherSuites()

getSupportedProtocols

public abstract String [] getSupportedProtocols()
SSL 접속으로 사용 가능하게 할 수 있는 프로토콜의 이름을 돌려줍니다.

반환값:
지원되고 있는 프로토콜의 배열

getEnabledProtocols

public abstract String [] getEnabledProtocols()
이 접속에 대해서 현재 사용 가능하게 되어 있는 프로토콜의 이름을 돌려줍니다.

반환값:
프로토콜의 배열
관련 항목:
setEnabledProtocols(String [])

setEnabledProtocols

public abstract void setEnabledProtocols(String [] protocols)
이 접속으로 사용 가능한 프로토콜의 버젼을 설정합니다.  

프로토콜은,getSupportedProtocols() 에 의해, 지원 대상으로 해 리스트되어 있지 않으면 안됩니다. 이 메소드의 호출이 정상적으로 행해졌을 때,protocols 파라미터에 리스트 된 프로토콜만, 사용할 수가 있습니다.

파라미터:
protocols - 사용 가능하게 하는 모든 프로토콜의 이름
예외:
IllegalArgumentException - 파라미터로 지정된 프로토콜의 일부가 지원되지 않는 경우, 또는 파라미터가 null 의 경우.
관련 항목:
getEnabledProtocols()

getSession

public abstract SSLSession  getSession()
이 접속으로 사용되고 있는 SSL 세션을 돌려줍니다. SSL 세션은 유효기간이 길고, 사용자에 따라서는 로그인 세션 전체에 대응하는 일도 있습니다. 세션에는, 세션내의 모든 접속으로 사용되는 암호화 방식군과 세션의 클라이언트와 서버의 식별 정보가 지정되고 있습니다.  

이 메소드는, 필요에 따라서 초기 핸드 쉐이크를 개시해, 핸드 쉐이크가 확립했을 때에 블록을 해제합니다.  

초기 핸드 쉐이크로 에러가 발생하면(자), 무효인 세션 객체가 돌려주어져 「SSL_NULL_WITH_NULL_NULL」라고 하는 무효인 암호화 방식군이 보고됩니다.

반환값:
SSLSession

addHandshakeCompletedListener

public abstract void addHandshakeCompletedListener(HandshakeCompletedListener  listener)
이 접속의 SSL 핸드 쉐이크의 완료 통지를 받기 위한 이벤트 청취자를 등록합니다.

파라미터:
listener - HandShakeCompleted 이벤트 청취자
예외:
IllegalArgumentException - 인수가 null 의 경우
관련 항목:
startHandshake() , removeHandshakeCompletedListener(HandshakeCompletedListener)

removeHandshakeCompletedListener

public abstract void removeHandshakeCompletedListener(HandshakeCompletedListener  listener)
이전에 등록된 핸드 쉐이크 완료 청취자를 삭제합니다.

파라미터:
listener - HandShakeCompleted 이벤트 청취자
예외:
IllegalArgumentException - 청취자가 등록되지 않은 경우, 또는 인수가 null 의 경우.
관련 항목:
addHandshakeCompletedListener(HandshakeCompletedListener)

startHandshake

public abstract void startHandshake()
                             throws IOException 
이 접속상에서 SSL 핸드 쉐이크를 개시합니다. 예를 들어, 새로운 암호화열쇠를 사용할 때, 암호화 방식군을 변경할 때, 새로운 세션을 개시할 때 등에, SSL 핸드 쉐이크를 개시합니다. 완전한 재인식증을 강제적으로 실행하려면 , 핸드 쉐이크를 개시하기 전에, 현재의 세션을 무효로 할 필요가 있습니다.

벌써 접속상에 송신된 데이터는, 이 핸드 쉐이크가 완료할 때까지는 그대로의 상태를 유지해, 핸드 쉐이크가 완료하면(자) 이벤트로부터 신호를 받습니다. 이 메소드는, 접속상의 최초의 핸드 쉐이크와 동시에 개시되어 핸드 쉐이크의 협상이 완료하면(자) 종료합니다. 기존의 소켓상에서의 복수의 핸드 쉐이크를 지원하지 않는 프로토콜은, IOException 를 throw 합니다.

예외:
IOException - 네트워크 레벨의 에러
관련 항목:
addHandshakeCompletedListener(HandshakeCompletedListener)

setUseClientMode

public abstract void setUseClientMode(boolean mode)
핸드 쉐이크시, 소켓이 클라이언트 (또는 서버) 모드를 사용하도록(듯이) 설정합니다.  

이 메소드는, 모든 핸드 쉐이크의 전에 호출할 필요가 있습니다. 일단 핸드 쉐이크가 개시되면(자), 이 소켓의 수명이 다할 때까지, 현재의 모드를 리셋 할 수 없습니다.  

일반적으로, 서버는 자신을 인증합니다만, 클라이언트는 반드시 그렇다고는 할 수 없습니다.

파라미터:
mode - 핸드 쉐이크를 클라이언트 모드로 개시하는 경우는 true
예외:
IllegalArgumentException - 최초의 핸드 쉐이크가 개시되고 나서 모드를 변경하려고 했을 경우.
관련 항목:
getUseClientMode()

getUseClientMode

public abstract boolean getUseClientMode()
핸드 쉐이크시에 클라이언트 모드를 사용하도록(듯이) 소켓이 설정되어 있는 경우는 true.

반환값:
클라이언트 모드로 핸드 쉐이크를 실시하는 경우는 true
관련 항목:
setUseClientMode(boolean)

setNeedClientAuth

public abstract void setNeedClientAuth(boolean need)
클라이언트 인증을 요구하도록(듯이) 소켓을 설정합니다. 이 옵션은, 서버 모드의 소켓만으로 사용합니다.  

소켓의 클라이언트 인증 설정은, 다음의 어느 쪽인가에 됩니다.

setWantClientAuth(boolean) 와 달리, 이 옵션이 설정되어 있어, 한편 클라이언트 인증 정보가 제공되지 않는 경우는, 협상이 정지해, 접속이 절단 됩니다.  

이 메소드를 호출하면(자), 지금까지 이 메소드 또는 setWantClientAuth(boolean) 에 의해 설정된 내용이 오버라이드(override) 됩니다.

파라미터:
need - 클라이언트 인증이 필수의 경우는 true, 클라이언트 인증이 불필요한 경우는 false.
관련 항목:
getNeedClientAuth() , setWantClientAuth(boolean) , getWantClientAuth() , setUseClientMode(boolean)

getNeedClientAuth

public abstract boolean getNeedClientAuth()
이 소켓에 클라이언트 인증이 필수인경우는 true 를 돌려줍니다. 이 옵션은, 서버 모드의 소켓만으로 사용합니다.

반환값:
클라이언트 인증이 필수의 경우는 true, 클라이언트 인증이 불필요한 경우는 false.
관련 항목:
setNeedClientAuth(boolean) , setWantClientAuth(boolean) , getWantClientAuth() , setUseClientMode(boolean)

setWantClientAuth

public abstract void setWantClientAuth(boolean want)
클라이언트 인증을 요구하도록(듯이) 소켓을 설정합니다. 이 옵션은, 서버 모드의 소켓만으로 사용합니다.  

소켓의 클라이언트 인증 설정은, 다음의 어느 쪽인가에 됩니다.

setNeedClientAuth(boolean) 와 달리, 이 옵션이 설정되어 있어, 한편 클라이언트 인증 정보가 제공되지 않는 경우에서도, 협상은 속행됩니다.  

이 메소드를 호출하면(자), 지금까지 이 메소드 또는 setNeedClientAuth(boolean) 에 의해 설정된 내용이 오버라이드(override) 됩니다.

파라미터:
want - 클라이언트 인증이 요구되었을 경우는 true, 클라이언트 인증이 불필요한 경우는 false.
관련 항목:
getWantClientAuth() , setNeedClientAuth(boolean) , getNeedClientAuth() , setUseClientMode(boolean)

getWantClientAuth

public abstract boolean getWantClientAuth()
이 소켓이 클라이언트 인증을 요구하는 경우는, true 를 돌려줍니다. 이 옵션은, 서버 모드의 소켓만으로 사용합니다.

반환값:
클라이언트 인증이 요구되었을 경우는 true, 클라이언트 인증이 불필요한 경우는 false.
관련 항목:
setNeedClientAuth(boolean) , getNeedClientAuth() , setWantClientAuth(boolean) , setUseClientMode(boolean)

setEnableSessionCreation

public abstract void setEnableSessionCreation(boolean flag)
이 소켓으로 새로운 SSL 세션을 확립할 수 있을지 어떨지를 제어합니다. 세션을 작성하지 못하고, 재개할 수 있는 기존의 세션이 없는 경우, 핸드 쉐이크는 성공하지 않습니다.

파라미터:
flag - 세션을 작성할 수 있는 경우는 true (디폴트). 기존의 세션을 재개하는 경우는 false
관련 항목:
getEnableSessionCreation()

getEnableSessionCreation

public abstract boolean getEnableSessionCreation()
이 소켓으로 새로운 SSL 세션을 확립할 수 있는 경우는 true 를 돌려줍니다.

반환값:
세션을 작성할 수 있는 경우는 true (디폴트). 기존의 세션을 재개하는 경우는 false
관련 항목:
setEnableSessionCreation(boolean)

getSSLParameters

public SSLParameters  getSSLParameters()
이 SSLSocket 로 유효한 SSLParameters 를 돌려줍니다. 반환되는 SSLParameters 의 암호화 방식군과 프로토콜은, 항상 null 이외입니다.

반환값:
이 SSLSocket 로 유효한 SSLParameters.
도입된 버젼:
1.6

setSSLParameters

public void setSSLParameters(SSLParameters  params)
이 소켓에 SSLParameters 를 적용합니다.

이것은 다음 일을 의미합니다.

파라미터:
params - 파라미터
예외:
IllegalArgumentException - setEnabledCipherSuites() 또는 the setEnabledProtocols()의 호출해에 실패했을 경우
도입된 버젼:
1.6

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.