JavaTM 2
Platform
Std.  Ed.  v1. 4.0

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 등의 기본이 되는 네트워크 트랜스폴트 프로토콜상에 시큐러티 보호층을 추가합니다. 다음의 시큐러티 보호를 합니다.

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

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

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

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

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

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

핸드 쉐이크의 완료를 나타내는 이벤트 통지를 받도록(듯이) 등록할 수도 있습니다. 이것에는 2 개의 클래스를 사용할 필요가 있습니다. 이 API 의 유저가 HandshakeCompletedListener 인스턴스를 등록하면(자),HandshakeCompletedEvent 오브젝트가 이 인스턴스에게 건네집니다. SSLSocketSSLSocketFactory 에 의해 작성되는지 SSLServerSocket 로부터의 접속을 accept 했을 때에 작성됩니다.

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 encode 방식의 이름을 돌려줍니다.
abstract  String [] getEnabledProtocols ()
          이 접속에 대해서 현재 사용 가능하게 되어 있는 프로토콜의 이름을 돌려줍니다.
abstract  boolean getEnableSessionCreation ()
          이 소켓으로 새로운 SSL 세션을 확립할 수 있는 경우는 true 를 돌려줍니다.
abstract  boolean getNeedClientAuth ()
          이 소켓이 클라이언트 인증을 요구하는 경우는 true 를 돌려줍니다.
abstract  SSLSession getSession ()
          이 접속으로 사용되고 있는 SSL 세션을 돌려줍니다.
abstract  String [] getSupportedCipherSuites ()
          이 접속으로 사용 가능하게 할 수 있는 encode 방식의 이름을 돌려줍니다.
abstract  String [] getSupportedProtocols ()
          SSL 접속으로 사용 가능하게 할 수 있는 프로토콜의 이름을 돌려줍니다.
abstract  boolean getUseClientMode ()
          최초의 핸드 쉐이크로 클라이언트 모드를 사용하도록(듯이) 소켓이 설정되어 있는 경우는 true
abstract  boolean getWantClientAuth ()
          이 소켓이 클라이언트 인증을 요구하는 경우는 true 를 돌려줍니다.
abstract  void removeHandshakeCompletedListener (HandshakeCompletedListener  listener)
          이전에 등록된 핸드 쉐이크 완료 청취자를 삭제합니다.
abstract  void setEnabledCipherSuites (String [] suites)
          이 접속에 대해서 사용 가능하게 하는 encode 방식을 제어합니다.
abstract  void setEnabledProtocols (String [] protocols)
          이 접속에 대해서 사용 가능하게 하는 프로토콜을 제어합니다.
abstract  void setEnableSessionCreation (boolean flag)
          이 소켓으로 새로운 SSL 세션을 확립할 수 있을지 어떨지를 제어합니다.
abstract  void setNeedClientAuth (boolean need)
          클라이언트 인증을 요구하도록(듯이) 소켓을 설정합니다.
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 , 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 ,
                    UnknownHostException 
서브 클래스에서만 사용됩니다. 지정된 주소와 포토의 서버에 대한 TCP 접속을 작성합니다. 이 소켓은 SSL 클라이언트로서 동작합니다.

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

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 ,
                    UnknownHostException 
서브 클래스에서만 사용됩니다. 지정된 주소와 TCP 포토의 서버에 대한 SSL 접속을 작성합니다. 접속의 클라이언트측은 지정된 주소와 포토에 바인드 됩니다. 이 소켓은 SSL 클라이언트로서 동작합니다.

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

getSupportedCipherSuites

public abstract String [] getSupportedCipherSuites()
이 접속으로 사용 가능하게 할 수 있는 encode 방식의 이름을 돌려줍니다. 통상은 이러한 encode 방식의 일부만이, 디폴트 구현으로 사용 가능하게 됩니다. 일부의 encode 방식은 디폴트 구현의 서비스 품질 요건을 채우지 않은 것이 있기 (위해)때문에입니다. 이러한 encode 방식은 특수한 어플리케이션으로 사용됩니다.

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

getEnabledCipherSuites

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

실제로 사용하는 encode 방식은 요건에 응해 적절히 선택해 주세요. 예를 들어, 서버 소켓이 하등의 인증을 요구하도록(듯이) 설정되어 있을 때, encode 방식에서 사용할 수 있는 비공개열쇠가 서버 소켓에 할당할 수 있지 않은 경우, 또는 encode 방식이 익명이기 (위해)때문에 클라이언트 인증을 사용할 수 없는 경우, 그러한 encode 방식은 실제로는 사용할 수 없습니다.

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

setEnabledCipherSuites

public abstract void setEnabledCipherSuites(String [] suites)
이 접속에 대해서 사용 가능하게 하는 encode 방식을 제어합니다. 사용 가능하게 하는 encode 방식은 getSupportedCipherSuites()로부터 돌려주어지는 encode 방식의 리스트로 사용 가능하게 되지 않으면 안됩니다. 사용 가능하게 되어 있을 때에도, 피어가 그 encode 방식을 서포트하고 있지 않기도 하고, 필요한 증명서와 비공개열쇠를 입수할 수 없거나 하는 경우, 그 encode 방식은 사용할 수 없습니다.

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

getSupportedProtocols

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

반환값:
서포트되고 있는 프로토콜의 배열

getEnabledProtocols

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

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

setEnabledProtocols

public abstract void setEnabledProtocols(String [] protocols)
이 접속에 대해서 사용 가능하게 하는 프로토콜을 제어합니다. 사용 가능하게 하는 프로토콜은 getSupportedProtocols()로부터 돌려주어지는 프로토콜의 리스트로 사용 가능하게 되지 않으면 안됩니다.

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

getSession

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

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

초기 핸드 쉐이크로 에러가 발생하면(자), 무효인 세션 오브젝트가 돌려주어져 「SSL_NULL_WITH_NULL_NULL」라고 하는 무효인 encode 방식이 보고됩니다.

반환값:
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 핸드 쉐이크를 개시합니다. 예를 들어, 새로운 암호화열쇠를 사용할 때, encode 방식을 변경할 때, 새로운 세션을 개시할 때 등에, SSL 핸드 쉐이크를 개시합니다. 완전한 재인식증을 강제적으로 실행하려면 , 핸드 쉐이크를 개시하기 전에, 현재의 세션을 무효로 할 필요가 있습니다.

이 접속을 개입시켜 데이터가 벌써 송신되고 있는 경우, 핸드 쉐이크중도 계속해 데이터는 송신됩니다. 핸드 쉐이크가 완료하면(자), 이벤트에 의해 통지됩니다. 이 메소드는 접속의 초기 핸드 쉐이크의 경우는 동기적으로 실행되어 네고시에이션을 실시한 핸드 쉐이크가 완료했을 때에 복귀합니다. 일부의 프로토콜에서는 기존의 소켓에 대해서 복수의 핸드 쉐이크를 실행할 수 없습니다. 실행했을 경우는 IOException 가 슬로우 됩니다.

예외:
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) 와 달리, 클라이언트 인증 정보를 제공하지 않는 경우는 네고시에이션이 정지해, 접속이 절단 됩니다.

파라미터:
need - 클라이언트 인증이 필요한 경우는 true 로 설정할 필요가 있다. 이 파라미터를 true 로 설정하면(자),setWantClientAuth(boolean) 의 현재의 설정이 오버라이드(override) 되는
관련 항목:
getNeedClientAuth() , setWantClientAuth(boolean) , getWantClientAuth() , setUseClientMode(boolean)

getNeedClientAuth

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

반환값:
서버 모드의 소켓이, 클라이언트 인증을 요구하는 경우는 true
관련 항목:
setNeedClientAuth(boolean) , setWantClientAuth(boolean) , getWantClientAuth() , setUseClientMode(boolean)

setWantClientAuth

public abstract void setWantClientAuth(boolean want)
클라이언트 인증을 요구하도록(듯이) 소켓을 설정합니다. 다만, 네고시에이션에 사용되는 encode 방식이 클라이언트 인증이 요구하는 경우만입니다. 이 옵션은 서버 모드의 소켓만으로 사용합니다. setNeedClientAuth(boolean) 는 달라, 클라이언트 인증 정보를 제공하지 않는 경우에서도, 네고시에이션은 속행합니다.

소켓은 서버 모드가 아니면 안됩니다.

파라미터:
want - 클라이언트 인증이 필요한 경우는 true 로 설정할 필요가 있다. 이 파라미터를 true 로 설정하면(자),setNeedClientAuth(boolean) 의 설정이 오버라이드(override) 되는
관련 항목:
getWantClientAuth() , setNeedClientAuth(boolean) , getNeedClientAuth() , setUseClientMode(boolean)

getWantClientAuth

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

반환값:
서버 모드의 소켓이 클라이언트 인증을 요구하는 경우는 true
관련 항목:
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)

JavaTM 2
Platform
Std.  Ed.  v1. 4.0

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

Java, Java 2 D, 및 JDBC 는 미국 및 그 외의 나라에 있어서의 미국 Sun Microsystems, Inc. 의 상표 혹은 등록상표입니다.
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.