public abstract class X509ExtendedTrustManager extends Object implements X509TrustManager
X509TrustManager
インタフェースの拡張機能。
man-in-the-middle 攻撃を防ぐために、ホスト名チェックを行なって、エンドエンティティー証明書のホスト名がターゲットのホスト名と一致することを検証できます。TLS ではそのようなチェックを行う必要はありませんが、TLS を介するいくつかのプロトコル (HTTPS など) では必要となります。JDK の初期バージョンでは、SSL/TLS レイヤーで証明書チェーンのチェックが行われ、TLS を介するレイヤーでホスト名検証のチェックが行われました。このクラスを 1 回呼び出すと、そのチェックを行うことができます。
RFC 2830 には、「LDAPS」アルゴリズムのサーバー識別仕様が定義されています。RFC 2818 には、「HTTPS」アルゴリズムのサーバー識別仕様とクライアント識別仕様の両方が定義されています。
X509TrustManager
, HostnameVerifier
コンストラクタと説明 |
---|
X509ExtendedTrustManager() |
修飾子と型 | メソッドと説明 |
---|---|
abstract void |
checkClientTrusted(X509Certificate[] chain, String authType, Socket socket)
ピアから部分的または完全な証明書チェーンが提供された場合に、認証タイプと SSL パラメータに基づいて証明書パスを構築して検証します。
|
abstract void |
checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine)
ピアから部分的または完全な証明書チェーンが提供された場合に、認証タイプと SSL パラメータに基づいて証明書パスを構築して検証します。
|
abstract void |
checkServerTrusted(X509Certificate[] chain, String authType, Socket socket)
ピアから部分的または完全な証明書チェーンが提供された場合に、認証タイプと SSL パラメータに基づいて証明書パスを構築して検証します。
|
abstract void |
checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine)
ピアから部分的または完全な証明書チェーンが提供された場合に、認証タイプと SSL パラメータに基づいて証明書パスを構築して検証します。
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
checkClientTrusted, checkServerTrusted, getAcceptedIssuers
public abstract void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket) throws CertificateException
認証タイプは、実際に使用される証明書によって決まります。たとえば、RSAPublicKey を使用する場合、authType は "RSA" になります。チェックでは、大文字と小文字が区別されます。
socket
パラメータが SSLSocket
のインスタンスであり、SSLParameters
のエンドポイント識別アルゴリズムが空でない場合は、man-in-the-middle 攻撃を回避するために、エンドポイント識別アルゴリズムで指定されているように、socket
の接続先のアドレスをエンドエンティティー X509 証明書で提供されているピアの識別情報に対してチェックするようにしてください。
socket
パラメータが SSLSocket
のインスタンスであり、SSLParameters
のアルゴリズムの制約が null 以外の場合は、証明書パス内のすべての証明書について、サブジェクトの公開鍵、署名アルゴリズム、鍵使用法、拡張鍵使用法などのフィールドが、このソケットで設定されているアルゴリズムの制約に準拠している必要があります。
chain
- ピアの証明書チェーンauthType
- 使用される鍵交換アルゴリズムsocket
- この接続に使用するソケット。このパラメータには null を指定可能。これは、実装で ssl パラメータをチェックする必要がないことを示すIllegalArgumentException
- null または長さ 0 の配列が chain
パラメータに渡された場合、あるいは null または長さ 0 の文字列が authType
パラメータに渡された場合CertificateException
- 証明書チェーンがこの TrustManager によって信頼されていない場合SSLParameters.getEndpointIdentificationAlgorithm()
, SSLParameters.setEndpointIdentificationAlgorithm(String)
, SSLParameters.getAlgorithmConstraints()
, SSLParameters.setAlgorithmConstraints(AlgorithmConstraints)
public abstract void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket) throws CertificateException
認証タイプは、暗号化方式群の鍵交換アルゴリズムで、「RSA」や「DHE_DSS」のように String として表現されます。注: 一部のエクスポート可能な暗号化方式群では、鍵交換アルゴリズムがハンドシェークの実行時に決定されます。たとえば、TLS_RSA_EXPORT_WITH_RC4_40_MD5 の authType は、一時的な RSA 鍵が鍵交換で使用されるときは RSA_EXPORT になり、サーバー証明書の鍵が使用されるときは RSA になります。チェックでは、大文字と小文字が区別されます。
socket
パラメータが SSLSocket
のインスタンスであり、SSLParameters
のエンドポイント識別アルゴリズムが空でない場合は、man-in-the-middle 攻撃を回避するために、エンドポイント識別アルゴリズムで指定されているように、socket
の接続先のアドレスをエンドエンティティー X509 証明書で提供されているピアの識別情報に対してチェックするようにしてください。
socket
パラメータが SSLSocket
のインスタンスであり、SSLParameters
のアルゴリズムの制約が null 以外の場合は、証明書パス内のすべての証明書について、サブジェクトの公開鍵、署名アルゴリズム、鍵使用法、拡張鍵使用法などのフィールドが、このソケットで設定されているアルゴリズムの制約に準拠している必要があります。
chain
- ピアの証明書チェーンauthType
- 使用される鍵交換アルゴリズムsocket
- この接続に使用するソケット。このパラメータには null を指定可能。これは、実装で ssl パラメータをチェックする必要がないことを示すIllegalArgumentException
- null または長さ 0 の配列が chain
パラメータに渡された場合、あるいは null または長さ 0 の文字列が authType
パラメータに渡された場合CertificateException
- 証明書チェーンがこの TrustManager によって信頼されていない場合SSLParameters.getEndpointIdentificationAlgorithm()
, SSLParameters.setEndpointIdentificationAlgorithm(String)
, SSLParameters.getAlgorithmConstraints()
, SSLParameters.setAlgorithmConstraints(AlgorithmConstraints)
public abstract void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine) throws CertificateException
認証タイプは、実際に使用される証明書によって決まります。たとえば、RSAPublicKey を使用する場合、authType は "RSA" になります。チェックでは、大文字と小文字が区別されます。
engine
パラメータが使用可能であり、SSLParameters
のエンドポイント識別アルゴリズムが空でない場合は、man-in-the-middle 攻撃を回避するために、エンドポイント識別アルゴリズムで指定されているように、engine
の接続先のアドレスをエンドエンティティー X509 証明書で提供されているピアの識別情報に対してチェックするようにしてください。
engine
パラメータが使用可能であり、SSLParameters
のアルゴリズムの制約が null 以外である場合は、証明書パス内のすべての証明書について、サブジェクトの公開鍵、署名アルゴリズム、鍵使用法、拡張鍵使用法などのフィールドが、このエンジンで設定されているアルゴリズムの制約に準拠している必要があります。
chain
- ピアの証明書チェーンauthType
- 使用される鍵交換アルゴリズムengine
- この接続に使用するエンジン。このパラメータには null を指定可能。これは、実装で ssl パラメータをチェックする必要がないことを示すIllegalArgumentException
- null または長さ 0 の配列が chain
パラメータに渡された場合、あるいは null または長さ 0 の文字列が authType
パラメータに渡された場合CertificateException
- 証明書チェーンがこの TrustManager によって信頼されていない場合SSLParameters.getEndpointIdentificationAlgorithm()
, SSLParameters.setEndpointIdentificationAlgorithm(String)
, SSLParameters.getAlgorithmConstraints()
, SSLParameters.setAlgorithmConstraints(AlgorithmConstraints)
public abstract void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine) throws CertificateException
認証タイプは、暗号化方式群の鍵交換アルゴリズムで、「RSA」や「DHE_DSS」のように String として表現されます。注: 一部のエクスポート可能な暗号化方式群では、鍵交換アルゴリズムがハンドシェークの実行時に決定されます。たとえば、TLS_RSA_EXPORT_WITH_RC4_40_MD5 の authType は、一時的な RSA 鍵が鍵交換で使用されるときは RSA_EXPORT になり、サーバー証明書の鍵が使用されるときは RSA になります。チェックでは、大文字と小文字が区別されます。
engine
パラメータが使用可能であり、SSLParameters
のエンドポイント識別アルゴリズムが空でない場合は、man-in-the-middle 攻撃を回避するために、エンドポイント識別アルゴリズムで指定されているように、engine
の接続先のアドレスをエンドエンティティー X509 証明書で提供されているピアの識別情報に対してチェックするようにしてください。
engine
パラメータが使用可能であり、SSLParameters
のアルゴリズムの制約が null 以外である場合は、証明書パス内のすべての証明書について、サブジェクトの公開鍵、署名アルゴリズム、鍵使用法、拡張鍵使用法などのフィールドが、このエンジンで設定されているアルゴリズムの制約に準拠している必要があります。
chain
- ピアの証明書チェーンauthType
- 使用される鍵交換アルゴリズムengine
- この接続に使用するエンジン。このパラメータには null を指定可能。これは、実装で ssl パラメータをチェックする必要がないことを示すIllegalArgumentException
- null または長さ 0 の配列が chain
パラメータに渡された場合、あるいは null または長さ 0 の文字列が authType
パラメータに渡された場合CertificateException
- 証明書チェーンがこの TrustManager によって信頼されていない場合SSLParameters.getEndpointIdentificationAlgorithm()
, SSLParameters.setEndpointIdentificationAlgorithm(String)
, SSLParameters.getAlgorithmConstraints()
, SSLParameters.setAlgorithmConstraints(AlgorithmConstraints)
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.