- java.lang.Object
-
- java.net.Socket
-
- javax.net.ssl.SSLSocket
-
- すべての実装されたインタフェース:
Closeable
,AutoCloseable
public abstract class SSLSocket extends Socket
このクラスはSocket
を拡張し、"セキュア・ソケット・レイヤー" (SSL)やIETF "トランスポート層のセキュリティ" (TLS)プロトコルのようなプロトコルを使って安全なソケットを提供します。これらのソケットは、通常のストリーム・ソケットですが、TCPなどのベースとなるネットワーク・トランスポート・プロトコル上にセキュリティ保護層を追加します。 次のセキュリティ保護が行われます。
- 整合性の保護 SSLがメッセージを盗聴による改ざんから保護する。
- 認証 ほとんどのモードでは、SSLによりピア認証が提供される。 通常は、サーバー認証が行われる。サーバーからの要求に応じて、クライアント認証も行われる。
- 機密性(プライバシの保護) ほとんどのSSLモードでは、クライアントとサーバー間で送信されるデータが暗号化され、データの機密性が保護される。 この結果、受動的な盗聴によって、金融情報や個人情報などの機密性の高いデータが盗聴されることがない。
これらのセキュリティ保護は、暗号化方式群を使用して指定します。暗号化方式群は、指定されたSSL接続で使用される暗号化アルゴリズムの組合せです。 ネゴシエーション処理時には、2つの終端が同じ暗号化方式群を選択し、その暗号化方式群が両方の環境で使用可能である必要があります。 共通の暗号化方式群がない場合は、SSL接続を確立できず、データを交換できません。
使用される暗号化方式群は、ハンドシェークと呼ばれるネゴシエーション・プロセスによって確立されます。 ハンドシェークでは、セッションの作成またはセッションへの参加が行われます。このセッションは、時間の経過とともにさまざまな接続を保護します。 ハンドシェークが完了すると、getSessionメソッドを使用してセッション属性にアクセスできます。 この接続の最初のハンドシェークは、次の3つのうちいずれかの方法で開始できます。
-
startHandshake
を呼び出し、ハンドシェークを明示的に開始する。 - このソケットに対してアプリケーション・データの読み込みまたは書込みを行うと、ハンドシェークが暗黙的に開始される。
-
getSession
を呼び出すと、有効なセッションが現在存在しない場合はセッションが設定され、ハンドシェークが暗黙的に開始される。
なんらかの理由でハンドシェークが失敗した場合、
SSLSocket
が閉じ、通信できなくなります。暗号化方式群を使用するときは、2つのグループについて理解する必要があります。
- サポートされる暗号化方式群: SSL実装でサポートされるすべての暗号化方式群。 このリストは、getSupportedCipherSuitesを使用して報告される。
- 有効になっている暗号化方式群。サポートされる暗号化方式群の完全なセットより少ないことがある。 このグループは、setEnabledCipherSuitesメソッドを使用して設定し、getEnabledCipherSuitesメソッドを使用して照会する。 新しいソケットでは、最小限の推奨構成を表すデフォルトの暗号化方式群が、初期状態で使用可能になっている。
デフォルトの実装で使用可能にする暗号化方式群では、サーバーを認証し、機密性が保証されなければいけません。 サーバー認証が行われず機密性が保証されない暗号化方式群を選択する場合は、サーバー認証が行われず非公開性が保証されない(暗号化されない)通信が使用されることに2つの終端が明示的に同意する必要があります。
SSLSocket
が最初に作成されるとき、ハンドシェイクは行われないので、アプリケーションは最初に通信プリファレンスを設定することができます: どの暗号スイートを使用するか、ソケットをクライアント・モードにするべきか、サーバー・モードにするべきかなどです。しかし、セキュリティは常に、アプリケーション・データが接続を介して送信されるまでに提供されます。ハンドシェークの完了を伝えるイベント通知を受信するように設定できます。 この場合、2つの追加クラスを利用する必要があります。 HandshakeCompletedEventオブジェクトは、このAPIのユーザーによって登録されたHandshakeCompletedListenerインスタンスに渡されます。
SSLSocket
は、SSLSocketFactory
によって、またはSSLServerSocket
からの接続をaccept
によって作成されます。SSLソケットの動作には、クライアント・モードまたはサーバー・モードがあります。 ハンドシェーク・プロセスを開始するピア、および各ピアから送信されるメッセージは、モードによって決まります。 接続には、クライアントとサーバーが1つずつ必要です。この要件を満たしていない場合、ハンドシェークは正しく行われません。 最初のハンドシェークが開始されてからは、ネゴシエーションをやり直す場合であっても、ソケットはクライアント・モードとサーバー・モードを切り替えられません。
- APIの注:
- 接続が不要になった場合、クライアント・アプリケーションとサーバー・アプリケーションは、それぞれの接続の両側を閉じる必要があります。 たとえば、
SSLSocket
オブジェクトの場合、アプリケーションでSocket.shutdownOutput()
またはOutputStream.close()
を呼び出して、出力ストリームを閉じたり、Socket.shutdownInput()
またはInputStream.close()
を呼び出したりできます。 入力ストリームのクローズは、最初にクローズされるピア出力ストリームに依存する場合があります。 適切な方法で(たとえば、ピアの書込み閉包通知を受信する前にSocket.shutdownInput()
がコールされるとします。)に接続がクローズされない場合、エラーが発生したことを示す例外が発生する可能性があります。SSLSocket
が閉じられると、再利用できなくなります。: 新しいSSLSocket
を作成する必要があります。 - 導入されたバージョン:
- 1.4
- 関連項目:
Socket
,SSLServerSocket
,SSLSocketFactory
-
-
コンストラクタのサマリー
コンストラクタ 修飾子 コンストラクタ 説明 protected
SSLSocket()
サブクラスでだけ使用されます。protected
SSLSocket(String host, int port)
サブクラスでだけ使用されます。protected
SSLSocket(String host, int port, InetAddress clientAddress, int clientPort)
サブクラスでだけ使用されます。protected
SSLSocket(InetAddress address, int port)
サブクラスでだけ使用されます。protected
SSLSocket(InetAddress address, int port, InetAddress clientAddress, int clientPort)
サブクラスでだけ使用されます。
-
メソッドのサマリー
修飾子と型 メソッド 説明 abstract void
addHandshakeCompletedListener(HandshakeCompletedListener listener)
この接続のSSLハンドシェークの完了通知を受け取るためのイベント・リスナーを登録します。String
getApplicationProtocol()
この接続でネゴシエートされた最新のアプリケーション・プロトコル値を返します。abstract String[]
getEnabledCipherSuites()
この接続で現在使用可能になっているSSL暗号化方式群の名前を返します。abstract String[]
getEnabledProtocols()
この接続に対して現在使用可能になっているプロトコルの名前を返します。abstract boolean
getEnableSessionCreation()
このソケットで新しいSSLセッションを確立できる場合はtrueを返します。String
getHandshakeApplicationProtocol()
現在進行中のSSL/TLSハンドシェイクでネゴシエートされたアプリケーション・プロトコル値を返します。BiFunction<SSLSocket,List<String>,String>
getHandshakeApplicationProtocolSelector()
SSL/TLS/DTLSハンドシェイク中にアプリケーション・プロトコル値を選択するコールバック関数を取得します。SSLSession
getHandshakeSession()
SSL/TLSハンドシェーク時に構築中のSSLSession
を返します。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セッションを確立できるかどうかを制御します。void
setHandshakeApplicationProtocolSelector(BiFunction<SSLSocket,List<String>,String> selector)
SSL/TLS/DTLSハンドシェイクのアプリケーション・プロトコル値を選択するコールバック関数を登録します。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, getOption, getOutputStream, getPort, getReceiveBufferSize, getRemoteSocketAddress, getReuseAddress, getSendBufferSize, getSoLinger, getSoTimeout, getTcpNoDelay, getTrafficClass, isBound, isClosed, isConnected, isInputShutdown, isOutputShutdown, sendUrgentData, setKeepAlive, setOOBInline, setOption, setPerformancePreferences, setReceiveBufferSize, setReuseAddress, setSendBufferSize, setSocketImplFactory, setSoLinger, setSoTimeout, setTcpNoDelay, setTrafficClass, shutdownInput, shutdownOutput, supportedOptions, toString
-
-
-
-
コンストラクタの詳細
-
SSLSocket
protected SSLSocket()
サブクラスでだけ使用されます。 初期化されていない未接続のTCPソケットを作成します。
-
SSLSocket
protected SSLSocket(String host, int port) throws IOException, UnknownHostException
サブクラスでだけ使用されます。 指定されたポートの指名されたホストに対するTCP接続を作成します。 このソケットは、SSLクライアントとして動作します。セキュリティ・マネージャが存在する場合、その
checkConnect
メソッドが、ホスト・アドレスとport
を引数に指定して呼び出されます。 この結果、SecurityExceptionがスローされることがあります。- パラメータ:
host
- 接続先のホストの名前、またはループバック・アドレスの場合はnull
。port
- サーバーのポートの番数- 例外:
IOException
- ソケットの作成時に入出力エラーが発生した場合SecurityException
- セキュリティ・マネージャが存在し、そのcheckConnect
メソッドでこの操作が許可されていない場合。UnknownHostException
- ホストが不明である場合IllegalArgumentException
- portパラメータが指定された有効なポート値の範囲(0から65535)外である場合。- 関連項目:
SecurityManager.checkConnect(java.lang.String, int)
-
SSLSocket
protected SSLSocket(InetAddress address, int port) throws IOException
サブクラスでだけ使用されます。 指定されたアドレスとポートのサーバーに対するTCP接続を作成します。 このソケットは、SSLクライアントとして動作します。セキュリティ・マネージャが存在する場合、その
checkConnect
メソッドが、ホスト・アドレスとport
を引数に指定して呼び出されます。 この結果、SecurityExceptionがスローされることがあります。- パラメータ:
address
- サーバーのホストport
- ポート- 例外:
IOException
- ソケットの作成時に入出力エラーが発生した場合SecurityException
- セキュリティ・マネージャが存在し、そのcheckConnect
メソッドでこの操作が許可されていない場合。IllegalArgumentException
- portパラメータが指定された有効なポート値の範囲(0から65535)外である場合。NullPointerException
-address
がnullである場合。- 関連項目:
SecurityManager.checkConnect(java.lang.String, int)
-
SSLSocket
protected SSLSocket(String host, int port, InetAddress clientAddress, int clientPort) throws IOException, UnknownHostException
サブクラスでだけ使用されます。 指定されたポートの指名されたホストに対するSSL接続を作成します。接続のクライアント側は、指定されたアドレスとポートにバインドされます。 このソケットは、SSLクライアントとして動作します。セキュリティ・マネージャが存在する場合、その
checkConnect
メソッドが、ホスト・アドレスとport
を引数に指定して呼び出されます。 この結果、SecurityExceptionがスローされることがあります。- パラメータ:
host
- 接続先のホストの名前、またはループバック・アドレスの場合はnull
。port
- サーバーのポートの番数clientAddress
- ソケットのバインド先のクライアントのアドレス、またはanyLocal
アドレスの場合はnull
。clientPort
- ソケットのバインド先のクライアントのポート、またはシステムで選択された空いているポートの場合はzero
。- 例外:
IOException
- ソケットの作成時に入出力エラーが発生した場合SecurityException
- セキュリティ・マネージャが存在し、そのcheckConnect
メソッドでこの操作が許可されていない場合。UnknownHostException
- ホストが不明である場合IllegalArgumentException
- portパラメータまたはclientPortパラメータが指定された有効なポート値の範囲(0から65535まで)にない場合。- 関連項目:
SecurityManager.checkConnect(java.lang.String, int)
-
SSLSocket
protected SSLSocket(InetAddress address, int port, InetAddress clientAddress, int clientPort) throws IOException
サブクラスでだけ使用されます。 指定されたアドレスとTCPポートのサーバーに対するSSL接続を作成します。接続のクライアント側は、指定されたアドレスとポートにバインドされます。 このソケットは、SSLクライアントとして動作します。セキュリティ・マネージャが存在する場合、その
checkConnect
メソッドが、ホスト・アドレスとport
を引数に指定して呼び出されます。 この結果、SecurityExceptionがスローされることがあります。- パラメータ:
address
- サーバーのホストport
- ポートclientAddress
- ソケットのバインド先のクライアントのアドレス、またはanyLocal
アドレスの場合はnull
。clientPort
- ソケットのバインド先のクライアントのポート、またはシステムで選択された空いているポートの場合はzero
。- 例外:
IOException
- ソケットの作成時に入出力エラーが発生した場合SecurityException
- セキュリティ・マネージャが存在し、そのcheckConnect
メソッドでこの操作が許可されていない場合。IllegalArgumentException
- portパラメータまたはclientPortパラメータが指定された有効なポート値の範囲(0から65535まで)にない場合。NullPointerException
-address
がnullである場合。- 関連項目:
SecurityManager.checkConnect(java.lang.String, int)
-
-
メソッドの詳細
-
getSupportedCipherSuites
public abstract String[] getSupportedCipherSuites()
この接続で使用可能にできる暗号化方式群の名前を返します。 通常は、その一部のみがデフォルトで使用可能になります。デフォルトのサービス品質要件を満たしていない暗号化方式群は、使用不可になります。 これらの暗号化方式群は、特殊なアプリケーションで使用されます。返される配列には、Java Cryptography Architecture標準アルゴリズム名ドキュメントの「JSSE暗号スイート名」セクションの標準暗号スイート名のリストからの暗号スイートが含まれ、プロバイダがサポートする他の暗号スイートも含まれます。
- 戻り値:
- 暗号化方式群名の配列
- 関連項目:
getEnabledCipherSuites()
,setEnabledCipherSuites(String [])
-
getEnabledCipherSuites
public abstract String[] getEnabledCipherSuites()
この接続で現在使用可能になっているSSL暗号化方式群の名前を返します。 SSLソケットが最初に作成されたときに、使用可能になっているすべての暗号化方式群で、最小限のサービス品質が保証されます。 環境によっては、この値は空の場合もあります。スイートが有効になっている場合でも、スイートは使用できないことに注意してください。 これは、ピアがサポートしていないか、またはその使用が制限されているか、スイートの必須の証明書(秘密鍵)が利用できない場合、または匿名スイートが有効であるが認証が必要な場合に発生します。
返される配列には、Java Cryptography Architecture標準アルゴリズム名ドキュメントの「JSSE暗号スイート名」セクションの標準暗号スイート名のリストからの暗号スイートが含まれ、プロバイダがサポートする他の暗号スイートも含まれます。
- 戻り値:
- 暗号化方式群名の配列
- 関連項目:
getSupportedCipherSuites()
,setEnabledCipherSuites(String [])
-
setEnabledCipherSuites
public abstract void setEnabledCipherSuites(String[] suites)
この接続で使用可能な暗号化方式群を設定します。suites
パラメータ内の各暗号化方式群はgetSupportedCipherSuites()でリストされている必要があります。そうでない場合、このメソッドは失敗します。 このメソッドの呼出しが成功したあと、suites
パラメータに示されている暗号化方式群のみが使用可能になります。暗号スイート名の標準リストは、Java暗号化アーキテクチャの標準アルゴリズム名のドキュメントの「JSSE暗号スイート名」セクションにあります。 プロバイダは、このリストにない暗号スイート名をサポートしているか、特定の暗号スイートの推奨名を使用していない可能性があります。
なぜ特定の暗号化方式群を接続で使用することができないかについては、
getEnabledCipherSuites()
を参照してください。- パラメータ:
suites
- 有効にするすべての暗号化方式群の名前- 例外:
IllegalArgumentException
- パラメータで指定された暗号化方式群の1つ以上がサポートされていないか、またはパラメータが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
- パラメータで指定されたプロトコルの1つ以上がサポートされていないか、またはprotocolsパラメータがnullである場合。- 関連項目:
getEnabledProtocols()
-
getSession
public abstract SSLSession getSession()
この接続で使用されているSSLセッションを返します。 これらは有効期間が長く、ユーザーによってはログイン・セッション全体に対応することもあります。 セッションには、セッション内のすべての接続で使用される暗号化方式群と、セッションのクライアントとサーバーの識別情報が指定されています。このメソッドは、必要に応じて初期ハンドシェークを開始し、ハンドシェークが確立したときにブロックを解除します。
初期ハンドシェークでエラーが発生すると、無効なセッション・オブジェクトが返され、SSL_NULL_WITH_NULL_NULLという無効な暗号化方式群が報告されます。
- 戻り値:
SSLSession
-
getHandshakeSession
public SSLSession getHandshakeSession()
SSL/TLSハンドシェーク時に構築中のSSLSession
を返します。TLSプロトコルでは、このクラスのインスタンスを使用しているとき、ただし
SSLSession
が完全に初期化され、getSession
によって使用可能になる前に必要なパラメータのネゴシエーションを行う可能性があります。 たとえば、有効なシグネチャ・アルゴリズムのリストでは、TrustManagerのディシジョン時に使用できる証明書のタイプを制限したり、TLSフラグメント・パケット・サイズの最大値をネットワーク環境をよりサポートするためにサイズ変更したりできます。このメソッドでは、構築されている
SSLSession
に早期にアクセスできます。 ハンドシェークの進捗状況によっては、一部のデータがまだ使用できない可能性があります。 たとえば、リモート・サーバーが証明書チェーンを送信しようとしているが、そのチェーンがまだ処理されていない場合、SSLSession
のgetPeerCertificates
メソッドはSSLPeerUnverifiedExceptionをスローします。 そのチェーンの処理が完了すると、getPeerCertificates
は適切な値を返します。getSession()
とは異なり、このメソッドは最初のハンドシェークを開始せず、ハンドシェークが完了するまでブロックしません。- 戻り値:
- このインスタンスが現在ハンドシェークしていない場合、または現在のハンドシェークが基本的なSSLSessionを作成できる程十分に進捗していない場合はnull。 それ以外の場合、このメソッドは、現在ネゴシエーションが行われている
SSLSession
を返します。 - 例外:
UnsupportedOperationException
- ベースとなるプロバイダがこの操作を実装していない場合。- 導入されたバージョン:
- 1.7
- 関連項目:
SSLEngine
,SSLSession
,ExtendedSSLSession
,X509ExtendedKeyManager
,X509ExtendedTrustManager
-
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ハンドシェークを開始します。 たとえば、新しい暗号化鍵を使用する、暗号化方式群を変更する、新しいセッションを開始するなどが一般的な理由です。 完全な再認証を強制的に実行するには、ハンドシェークを開始する前に、現在のセッションを無効にする必要があります。すでに接続上に送信されたデータは、このハンドシェークが完了するまではそのままの状態を維持します。 ハンドシェークが完了するとイベントから信号を受け取ります。 このメソッドは、接続上の最初のハンドシェークと同時に開始され、ハンドシェークのネゴシエーションが完了すると終了します。 既存のソケット上での複数のハンドシェークをサポートしないプロトコルは、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.getCipherSuites()
がnull以外の場合は、その値を使用してsetEnabledCipherSuites()
が呼び出される。params.getProtocols()
がnull以外の場合は、その値を使用してsetEnabledProtocols()
が呼び出される。params.getNeedClientAuth()
またはparams.getWantClientAuth()
がtrue
を返した場合は、それぞれsetNeedClientAuth(true)
とsetWantClientAuth(true)
が呼び出される。それ以外の場合はsetWantClientAuth(false)
が呼び出される。params.getServerNames()
がnull以外の場合、ソケットはサーバー名をその値で構成する。params.getSNIMatchers()
がnull以外の場合、ソケットはSNIマッチャをその値で構成する。
- パラメータ:
params
- パラメータ- 例外:
IllegalArgumentException
- setEnabledCipherSuites()またはsetEnabledProtocols()の呼出しが失敗した場合- 導入されたバージョン:
- 1.6
-
getApplicationProtocol
public String getApplicationProtocol()
この接続でネゴシエートされた最新のアプリケーション・プロトコル値を返します。基になるSSL/TLS/DTLS実装でサポートされている場合、RFC 7301、アプリケーション層プロトコル・ネゴシエーション(ALPN)などのアプリケーション・ネーム・ネゴシエーション・メカニズムは、ピア間のアプリケーション・レベルの値をネゴシエートできます。
- 実装要件:
- このクラスの実装は、
UnsupportedOperationException
をスローし、他のアクションを実行しません。 - 戻り値:
- アプリケーション・プロトコルがこの接続に使用されるかどうかまだ判定されていない場合はnull、アプリケーション・プロトコル値が使用されない場合は空の
String
、値が正常にネゴシエートされた場合は空のアプリケーション・プロトコルString
。 - 例外:
UnsupportedOperationException
- ベースとなるプロバイダがこの操作を実装していない場合。- 導入されたバージョン:
- 9
-
getHandshakeApplicationProtocol
public String getHandshakeApplicationProtocol()
現在進行中のSSL/TLSハンドシェイクでネゴシエートされたアプリケーション・プロトコル値を返します。getHandshakeSession()
と同様に、接続はハンドシェイクの途中にある可能性があります。 アプリケーション・プロトコルはまだ利用可能であるかもしれないし、利用可能でないかもしれません。- 実装要件:
- このクラスの実装は、
UnsupportedOperationException
をスローし、他のアクションを実行しません。 - 戻り値:
- アプリケーション・プロトコルがこのハンドシェイクに使用されるかどうかまだ判定されていない場合はnull、アプリケーション・プロトコル値が使用されない場合は空の
String
、値が正常にネゴシエートされた場合は空ではないアプリケーション・プロトコルString
。 - 例外:
UnsupportedOperationException
- ベースとなるプロバイダがこの操作を実装していない場合。- 導入されたバージョン:
- 9
-
setHandshakeApplicationProtocolSelector
public void setHandshakeApplicationProtocolSelector(BiFunction<SSLSocket,List<String>,String> selector)
SSL/TLS/DTLSハンドシェイクのアプリケーション・プロトコル値を選択するコールバック関数を登録します。 この関数は、SSLParameters.setApplicationProtocols
を使用して指定された値をオーバーライドし、次の型パラメータをサポートします:-
SSLSocket
- 最初の引数は、ハンドシェーク・セッションや構成を含め、現在の
SSLSocket
を検査できるようにします。 -
List<String>
- 関数の第2引数は、TLSピアによって通知されたアプリケーション・プロトコル名をリストします。
-
String
- 関数の結果はアプリケーションのプロトコル名であり、宣言された名前のどれも受け入れられないことを示すためにはnullです。 戻り値が空の
String
の場合、アプリケーション・プロトコルの指示は使用されません。 戻り値がnull (値が選択されていない)またはピアによって宣言されていない値である場合、基になるプロトコルは、実行するアクションを決定します。 (たとえば、ALPNは"no_application_protocol"アラートを送信し、接続を終了します。)
serverSocket.setHandshakeApplicationProtocolSelector( (serverSocket, clientProtocols) -> { SSLSession session = serverSocket.getHandshakeSession(); return chooseApplicationProtocol( serverSocket, clientProtocols, session.getProtocol(), session.getCipherSuite()); });
- APIの注:
- このメソッドは、TLSハンドシェイクが開始される前にTLSサーバー・アプリケーションによって呼び出される必要があります。 また、この
SSLSocket
は、コールバック関数で選択されたアプリケーション・プロトコルと互換性のあるパラメータで構成する必要があります。 たとえば、暗号スイートの選択肢を誤ると、適切なアプリケーション・プロトコルが得られない可能性があります。SSLParameters
を参照してください。 - 実装要件:
- このクラスの実装は、
UnsupportedOperationException
をスローし、他のアクションを実行しません。 - パラメータ:
selector
- コールバック関数、または登録解除の場合はnull。- 例外:
UnsupportedOperationException
- ベースとなるプロバイダがこの操作を実装していない場合。- 導入されたバージョン:
- 9
-
-
getHandshakeApplicationProtocolSelector
public BiFunction<SSLSocket,List<String>,String> getHandshakeApplicationProtocolSelector()
SSL/TLS/DTLSハンドシェイク中にアプリケーション・プロトコル値を選択するコールバック関数を取得します。 関数型パラメータについては、setHandshakeApplicationProtocolSelector
を参照してください。- 実装要件:
- このクラスの実装は、
UnsupportedOperationException
をスローし、他のアクションを実行しません。 - 戻り値:
- コールバック関数。何も設定されていない場合はnull。
- 例外:
UnsupportedOperationException
- ベースとなるプロバイダがこの操作を実装していない場合。- 導入されたバージョン:
- 9
-
-