第3章 HTTPS の設定
概要
この章では、HTTPS エンドポイントを設定する方法を説明します。
3.1. 認証代替
3.1.1. ターゲット専用認証
概要
アプリケーションがターゲットのみの認証用に設定されている場合は、ターゲットはクライアントに対して自己認証されますが、図3.1「ターゲット認証のみ」 に示されているように、クライアントはターゲットオブジェクトに対して認証されません。
図3.1 ターゲット認証のみ
セキュリティーハンドシェイク
アプリケーションを実行する前に、クライアントとサーバーが以下のように設定する必要があります。
- 証明書チェーンがサーバーに関連付けられます。証明書チェーンは、Java キーストア (ee 「アプリケーションの Own 証明書の指定」) の形式で提供されます。
- 信頼できる認証局 (CA) のリストがクライアントで利用できます (「信頼された CA 証明書の指定」 を参照)。
セキュリティーハンドシェイク時に、サーバーは証明書チェーンをクライアントに送信します (図3.1「ターゲット認証のみ」 を参照)。その後、クライアントは信頼される CA リストを検索し、サーバーの証明書チェーン内の CA 証明書のいずれかに一致する CA 証明書を検索します。
HTTPS の例
クライアント側では、ターゲットのみの認証に必要なポリシー設定はありません。X.509 証明書を HTTPS ポートに関連付ける ことなく、クライアントを設定するだけです。ただし、クライアントに信頼される CA 証明書のリストを指定する必要があります (「信頼された CA 証明書の指定」 を参照)。
サーバー側では、サーバーの XML 設定ファイルで sec:clientAuthentication
要素がクライアント認証を必要としないことを確認してください。この要素は省略できます。その場合、デフォルトのポリシーはクライアント認証を必要とし ない ことです。ただし、sec:clientAuthentication
要素が存在する場合は、以下のように設定する必要があります。
<http:destination id="{Namespace}PortName.http-destination"> <http:tlsServerParameters secureSocketProtocol="TLSv1"> ... <sec:clientAuthentication want="false" required="false"/> </http:tlsServerParameters> </http:destination>
Poodle 脆弱性 (CVE-2014-3566) から保護するために、サーバー側で secureSocketProtocol を TLSv1
に設定する必要があります。
want 属性は false (デフォルト) に設定され、TLS ハンドシェイク時にサーバーから X.509 証明書を要求しないように指定します。必要な属性は false(デフォルト) に設定され、クライアント証明書が存在しないと TLS ハンドシェイク時に例外がトリガーされないことが指定されます。
want
属性は、true
または false
のいずれかに設定できます。true
に設定すると、want
設定により、TLS ハンドシェイク中にサーバーがクライアント証明書を要求しますが、required
属性が false
に設定されている限り、証明書がないクライアントに対する例外は発生しません。
また、X.509 証明書をサーバーの HTTPS ポート (「アプリケーションの Own 証明書の指定」 を参照) に関連付け、サーバーに信頼される CA 証明書のリストを提供する必要もあります (「信頼された CA 証明書の指定」 を参照してください)。
暗号化スイートの選択は、ターゲットのみの認証がサポートされるかどうかに影響を及ぼす可能性があります (4章HTTPS 暗号化スイートの設定を参照)。
3.1.2. 相互認証
概要
アプリケーションが相互認証用に設定されている場合、ターゲットはクライアントに対して自己認証され、クライアントはそれ自体をターゲットに対して認証します。このシナリオは、図3.2「相互認証」 で説明されています。この場合、サーバーとクライアントはそれぞれ、セキュリティーハンドシェイクに X.509 証明書が必要になります。
図3.2 相互認証
セキュリティーハンドシェイク
アプリケーションを実行する前に、クライアントとサーバーが以下のように設定する必要があります。
- クライアントとサーバーに、関連する証明書チェーンが関連付けられています (「アプリケーションの Own 証明書の指定」 を参照)。
- クライアントとサーバーの両方が信頼される認証局 (CA) のリストで設定されます (「信頼された CA 証明書の指定」 を参照してください)。
TLS ハンドシェイクの間、サーバーは証明書チェーンをクライアントに送信し、クライアントは証明書チェーンをサーバーに送信します。図3.1「ターゲット認証のみ」 を参照してください。
HTTPS の例
クライアント側では、相互認証に必要なポリシー設定はありません。X.509 証明書をクライアントの HTTPS ポートに関連付けるだけです (「アプリケーションの Own 証明書の指定」 を参照)。信頼できる CA 証明書のリストをクライアントに提供する必要もあります (「信頼された CA 証明書の指定」 を参照してください)。
サーバー側では、サーバーの XML 設定ファイルで sec:clientAuthentication
要素がクライアント認証を 必要 とすることを確認してください。以下に例を示します。
<http:destination id="{Namespace}PortName.http-destination"> <http:tlsServerParameters secureSocketProtocol="TLSv1"> ... <sec:clientAuthentication want="true" required="true"/> </http:tlsServerParameters> </http:destination>
Poodle 脆弱性 (CVE-2014-3566) から保護するために、サーバー側で secureSocketProtocol を TLSv1
に設定する必要があります。
ここで、want
属性は true
に設定され、サーバーが TLS ハンドシェイク中にクライアントから X.509 証明書を要求することを指定します。required
属性も true
に設定されます。クライアント証明書がない場合に TLS ハンドシェイク中に例外がトリガーされることを指定します。
また、X.509 証明書をサーバーの HTTPS ポート (「アプリケーションの Own 証明書の指定」 を参照) に関連付け、サーバーに信頼される CA 証明書のリストを提供する必要もあります (「信頼された CA 証明書の指定」 を参照)。
暗号化スイートの選択は、双方認証がサポートされるかどうかに影響を及ぼす可能性があります (4章HTTPS 暗号化スイートの設定を参照)。