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 ソケットが最初に作成されたときに、使用可能になっているすべての暗号化方式群で、最小限のサービス品質が保証されます。環境によっては、この値は空の場合もあります。

暗号化方式群は、たとえ有効でも使用されないことがあります。たとえば、ピアが暗号化方式群をサポートしない場合、この符号化に必要な証明書 (および非公開鍵) を使用することができない場合、または、匿名の暗号化方式群が利用可能であっても認証が要求される場合などです。

戻り値:
暗号化方式群名の配列
関連項目:
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 をスローします。

例外:
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) によって設定された内容がオーバーライドされます。

パラメータ:
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) によって設定された内容がオーバーライドされます。

パラメータ:
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 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。