|
JavaTM 2 Platform Std. Ed. v1. 4.0 |
||||||||||
전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 모든 클래스 | ||||||||||
개요: 상자 | 필드 | constructor | 메소드 | 상세: 필드 | constructor | 메소드 |
java.lang.Object | +--java.net.Socket | +--javax.net.ssl.SSLSocket
이 클래스는 Socket
를 확장해, Secure Sockets Layer (SSL)나 IETF Transport Layer Security (TLS)등의 프로토콜을 사용하는 시큐어 소켓을 제공합니다.
이러한 소켓은 통상의 스트림 소켓입니다만, TCP 등의 기본이 되는 네트워크 트랜스폴트 프로토콜상에 시큐러티 보호층을 추가합니다. 다음의 시큐러티 보호를 합니다.
이러한 시큐러티 보호는 「encode 방식」을 사용해 지정합니다. encode 방식은 지정된 SSL 접속으로 사용되는 암호화 알고리즘의 편성입니다. 네고시에이션을 실시하려면 , 2 개의 종단이 같은 encode 방식을 선택해, 그 encode 방식이 양쪽 모두의 환경에서 사용 가능하지 않으면 안됩니다. 공통의 encode 방식이 없는 경우는 SSL 접속을 확립하지 못하고, 데이터를 교환할 수 없습니다.
사용되는 encode 방식은 「핸드 쉐이크」라고 불리는 네고시에이션 프로세스에 의해 확립됩니다. 핸드 쉐이크에서는 세션의 작성 또는 참가를 합니다. 작성 또는 참가한 세션은 무효가 될 때까지 다양한 접속을 보호합니다. 핸드 쉐이크가 완료하면(자),getSession 메소드를 사용해 세션 속성에 액세스 할 수 있습니다. 접속의 최초의 핸드 쉐이크는 다음의 몇개의 방법으로 개시할 수 있습니다.
startHandshake
를 호출해, 핸드 쉐이크를 명시적으로 개시한다
getSession
를 호출하면(자), 유효한 세션이 현재 존재하지 않는 경우는 세션이 설정되어 핸드 쉐이크가 암묵적으로 개시된다
하등의 이유로써 핸드 쉐이크가 실패했을 경우,SSLSocket
가 닫아 통신할 수 없게 됩니다.
encode 방식을 사용할 때는 2 개의 그룹에 대해 이해할 필요가 있습니다.
디폴트의 구현으로 사용 가능하게 하는 encode 방식으로는 서버를 인증해, 기밀성이 프로텍션되지 않으면 안됩니다. 서버 인증을 하지 않고 기밀성이 프로텍션되지 않는 encode 방식을 선택하는 경우는 서버 인증을 하지 않고 비공개성이 프로텍션되지 않는 (암호화되지 않는다) 통신이 사용되는 것에 2 개의 종단이 명시적으로 동의 할 필요가 있습니다.
SSLSocket
가 최초로 작성될 때는 핸드 쉐이크는 행해지지 않습니다. 이 때문에, 사용하는 encode 방식이나 소켓 모드 (클라이언트 모드 또는 서버 모드)등의 통신 설정은 어플리케이션으로부터 실시합니다. 다만, 그 접속을 사용해 어플리케이션 데이터를 송신할 때는 항상 시큐러티가 프로텍션됩니다.
핸드 쉐이크의 완료를 나타내는 이벤트 통지를 받도록(듯이) 등록할 수도 있습니다. 이것에는 2 개의 클래스를 사용할 필요가 있습니다. 이 API 의 유저가 HandshakeCompletedListener 인스턴스를 등록하면(자),HandshakeCompletedEvent 오브젝트가 이 인스턴스에게 건네집니다. SSLSocket
는 SSLSocketFactory
에 의해 작성되는지 SSLServerSocket
로부터의 접속을 accept
했을 때에 작성됩니다.
SSL 소켓의 동작에는 클라이언트 모드 또는 서버 모드가 있습니다. 핸드 쉐이크 프로세스를 개시하는 피어, 및 각 피어로부터 송신되는 메세지는 모드에 의해 정해집니다. 다만, 접속에는 클라이언트와 서버가 1 개씩 필요합니다. 이 요건을 채우지 않은 경우는 핸드 쉐이크를 올바르게 진행하지 않습니다.
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 |
생성자의 상세 |
protected SSLSocket()
protected SSLSocket(String host, int port) throws IOException , UnknownHostException
host
- 접속하는 호스트의 이름port
- 서버의 포토 번호
IOException
- 소켓의 생성중에 입출력 에러가 발생했을 경우
UnknownHostException
- 호스트가 불명의 경우protected SSLSocket(InetAddress address, int port) throws IOException , UnknownHostException
address
- 서버의 호스트port
- 포토
IOException
- 소켓의 생성중에 입출력 에러가 발생했을 경우
UnknownHostException
- 호스트가 불명의 경우protected SSLSocket(String host, int port, InetAddress clientAddress, int clientPort) throws IOException , UnknownHostException
host
- 접속하는 호스트의 이름port
- 서버의 포토 번호clientAddress
- 클라이언트의 호스트clientPort
- 클라이언트의 포토 번호
IOException
- 소켓의 생성중에 입출력 에러가 발생했을 경우
UnknownHostException
- 호스트가 불명의 경우protected SSLSocket(InetAddress address, int port, InetAddress clientAddress, int clientPort) throws IOException , UnknownHostException
address
- 서버의 호스트port
- 포토clientAddress
- 클라이언트의 호스트clientPort
- 클라이언트의 포토 번호
IOException
- 소켓의 생성중에 입출력 에러가 발생했을 경우
UnknownHostException
- 호스트가 불명의 경우메소드의 상세 |
public abstract String [] getSupportedCipherSuites()
getEnabledCipherSuites()
,
setEnabledCipherSuites(String [])
public abstract String [] getEnabledCipherSuites()
실제로 사용하는 encode 방식은 요건에 응해 적절히 선택해 주세요. 예를 들어, 서버 소켓이 하등의 인증을 요구하도록(듯이) 설정되어 있을 때, encode 방식에서 사용할 수 있는 비공개열쇠가 서버 소켓에 할당할 수 있지 않은 경우, 또는 encode 방식이 익명이기 (위해)때문에 클라이언트 인증을 사용할 수 없는 경우, 그러한 encode 방식은 실제로는 사용할 수 없습니다.
getSupportedCipherSuites()
,
setEnabledCipherSuites(String [])
public abstract void setEnabledCipherSuites(String [] suites)
suites
- 사용 가능하게 하는 모든 encode 방식의 이름
IllegalArgumentException
- 파라미터로 지정된 encode 방식의 일부가 서포트되지 않는 경우, 또는 파라미터가 null 의 경우getSupportedCipherSuites()
,
getEnabledCipherSuites()
public abstract String [] getSupportedProtocols()
public abstract String [] getEnabledProtocols()
setEnabledProtocols(java.lang.String[])
public abstract void setEnabledProtocols(String [] protocols)
protocols
- 사용 가능하게 하는 모든 프로토콜의 이름
IllegalArgumentException
- 파라미터로 지정된 프로토콜의 일부가 서포트되지 않는 경우, 또는 파라미터가 null 의 경우getEnabledProtocols()
public abstract SSLSession getSession()
이 메소드는 필요에 따라서 초기 핸드 쉐이크를 개시해, 핸드 쉐이크가 확립했을 때에 블록을 해제합니다.
초기 핸드 쉐이크로 에러가 발생하면(자), 무효인 세션 오브젝트가 돌려주어져 「SSL_NULL_WITH_NULL_NULL」라고 하는 무효인 encode 방식이 보고됩니다.
SSLSession
public abstract void addHandshakeCompletedListener(HandshakeCompletedListener listener)
listener
- HandShakeCompleted 이벤트 청취자
IllegalArgumentException
- 인수가 null 의 경우startHandshake()
,
removeHandshakeCompletedListener(HandshakeCompletedListener)
public abstract void removeHandshakeCompletedListener(HandshakeCompletedListener listener)
listener
- HandShakeCompleted 이벤트 청취자
IllegalArgumentException
- 청취자가 등록되지 않은 경우, 또는 인수가 null 의 경우addHandshakeCompletedListener(HandshakeCompletedListener)
public abstract void startHandshake() throws IOException
이 접속을 개입시켜 데이터가 벌써 송신되고 있는 경우, 핸드 쉐이크중도 계속해 데이터는 송신됩니다. 핸드 쉐이크가 완료하면(자), 이벤트에 의해 통지됩니다. 이 메소드는 접속의 초기 핸드 쉐이크의 경우는 동기적으로 실행되어 네고시에이션을 실시한 핸드 쉐이크가 완료했을 때에 복귀합니다. 일부의 프로토콜에서는 기존의 소켓에 대해서 복수의 핸드 쉐이크를 실행할 수 없습니다. 실행했을 경우는 IOException 가 슬로우 됩니다.
IOException
- 네트워크 레벨의 에러addHandshakeCompletedListener(HandshakeCompletedListener)
public abstract void setUseClientMode(boolean mode)
mode
- 최초의 핸드 쉐이크를 클라이언트 모드로 개시하는 경우는 true
IllegalArgumentException
- 핸드 쉐이크가 개시한 뒤에, 모드를 변경하려고 했을 경우getUseClientMode()
public abstract boolean getUseClientMode()
setUseClientMode(boolean)
public abstract void setNeedClientAuth(boolean need)
setWantClientAuth(boolean)
와 달리, 클라이언트 인증 정보를 제공하지 않는 경우는 네고시에이션이 정지해, 접속이 절단 됩니다.
need
- 클라이언트 인증이 필요한 경우는 true 로 설정할 필요가 있다. 이 파라미터를 true 로 설정하면(자),setWantClientAuth(boolean)
의 현재의 설정이 오버라이드(override) 되는getNeedClientAuth()
,
setWantClientAuth(boolean)
,
getWantClientAuth()
,
setUseClientMode(boolean)
public abstract boolean getNeedClientAuth()
setNeedClientAuth(boolean)
,
setWantClientAuth(boolean)
,
getWantClientAuth()
,
setUseClientMode(boolean)
public abstract void setWantClientAuth(boolean want)
setNeedClientAuth(boolean)
는 달라, 클라이언트 인증 정보를 제공하지 않는 경우에서도, 네고시에이션은 속행합니다.
소켓은 서버 모드가 아니면 안됩니다.
want
- 클라이언트 인증이 필요한 경우는 true 로 설정할 필요가 있다. 이 파라미터를 true 로 설정하면(자),setNeedClientAuth(boolean)
의 설정이 오버라이드(override) 되는getWantClientAuth()
,
setNeedClientAuth(boolean)
,
getNeedClientAuth()
,
setUseClientMode(boolean)
public abstract boolean getWantClientAuth()
setNeedClientAuth(boolean)
,
getNeedClientAuth()
,
setWantClientAuth(boolean)
,
setUseClientMode(boolean)
public abstract void setEnableSessionCreation(boolean flag)
flag
- 세션을 작성할 수 있는 경우는 true (디폴트). 기존의 세션을 재개하는 경우는 falsegetEnableSessionCreation()
public abstract boolean getEnableSessionCreation()
setEnableSessionCreation(boolean)
|
JavaTM 2 Platform Std. Ed. v1. 4.0 |
||||||||||
전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 모든 클래스 | ||||||||||
개요: 상자 | 필드 | constructor | 메소드 | 상세: 필드 | constructor | 메소드 |
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.