|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object | +--java.net.Socket | +--javax.net.ssl.SSLSocket
このクラスは Socket
を拡張し、Secure Sockets Layer (SSL) や IETF Transport Layer Security (TLS) などのプロトコルを使用するセキュアソケットを提供します。
これらのソケットは、通常のストリームソケットですが、TCP などの基本となるネットワークトランスポートプロトコル上にセキュリティ保護層を追加します。次のセキュリティ保護が行われます。
これらのセキュリティ保護は、「符号化方式」を使用して指定します。符号化方式は、指定された SSL 接続で使用される暗号化アルゴリズムの組み合わせです。ネゴシエーションを行うには、2 つの終端が同じ符号化方式を選択し、その符号化方式が両方の環境で使用可能でなければなりません。共通の符号化方式がない場合は、SSL 接続を確立できず、データを交換できません。
使用される符号化方式は、「ハンドシェーク」と呼ばれるネゴシエーションプロセスによって確立されます。ハンドシェークでは、セッションの作成または参加が行われます。作成または参加したセッションは、無効になるまでさまざまな接続を保護します。ハンドシェークが完了すると、getSession メソッドを使用してセッション属性にアクセスできます。接続の最初のハンドシェークは、次のいずれかの方法で開始できます。
startHandshake
を呼び出し、ハンドシェークを明示的に開始する
getSession
を呼び出すと、有効なセッションが現在存在しない場合はセッションが設定され、ハンドシェークが暗黙的に開始される
なんらかの理由でハンドシェークが失敗した場合、SSLSocket
が閉じ、通信できなくなります。
符号化方式を使用するときは、2 つのグループについて理解する必要があります。
デフォルトの実装で使用可能にする符号化方式では、サーバを認証し、機密性が保証されなければなりません。サーバ認証が行われず機密性が保証されない符号化方式を選択する場合は、サーバ認証が行われず非公開性が保証されない (暗号化されない) 通信が使用されることに 2 つの終端が明示的に同意する必要があります。
SSLSocket
が最初に作成されるときには、ハンドシェークは行われません。このため、使用する符号化方式やソケットモード (クライアントモードまたはサーバモード) などの通信設定は、アプリケーションから行います。ただし、その接続を使用してアプリケーションデータを送信するときは、常にセキュリティが保証されます。
ハンドシェークの完了を示すイベント通知を受け取るように登録することもできます。これには、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 符号化方式の名前を返します。 |
abstract String[] |
getEnabledProtocols()
この接続に対して現在使用可能になっているプロトコルの名前を返します。 |
abstract boolean |
getEnableSessionCreation()
このソケットで新しい SSL セッションを確立できる場合は true を返します。 |
abstract boolean |
getNeedClientAuth()
このソケットがクライアント認証を要求する場合は true を返します。 |
abstract SSLSession |
getSession()
この接続で使用されている SSL セッションを返します。 |
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)
クライアント認証を要求するようにソケットを設定します。 |
abstract void |
setUseClientMode(boolean mode)
最初のハンドシェークでクライアント (またはサーバ) モードを使用するようにソケットを設定します。 |
abstract void |
setWantClientAuth(boolean want)
クライアント認証を要求するようにソケットを設定します。 |
abstract void |
startHandshake()
この接続上で SSL ハンドシェークを開始します。 |
クラス 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()
実際に使用する符号化方式は、要件に応じて適切に選択してください。たとえば、サーバソケットがなんらかの認証を要求するように設定されているときに、符号化方式で使用できる非公開鍵がサーバソケットに割り当てられていない場合、または符号化方式が匿名であるためクライアント認証を使用できない場合、それらの符号化方式は実際には使用できません。
getSupportedCipherSuites()
,
setEnabledCipherSuites(String [])
public abstract void setEnabledCipherSuites(String[] suites)
suites
- 使用可能にするすべての符号化方式の名前
IllegalArgumentException
- パラメータに指定された符号化方式の一部がサポートされない場合、またはパラメータが 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」という無効な符号化方式が報告されます。
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)
の現在の設定がオーバーライドされる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)
の設定がオーバーライドされる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 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.