SSL/TLS クライアント認証
このトピックでは、SSL/TLS (Secure Sockets Layer/Transport Layer Security) クライアント認証と HTTPS クライアント認証を同じ意味で使用しています。HTTPS は、TCP 接続上で暗号接続をネゴシエートして確立するためのプロトコルである SSL/TLS を使用して、セキュリティ保護された通信チャネル上で実行されるもので、本質的には HTTP です。HTTP 基本認証はプロトコルレベルで行われ、フォームベース認証はアプリケーションレベル (プロトコルレベルより上位) で行われます。一方、HTTPS クライアント認証は、プロトコルレベルの下位にあるトランスポートレベルで行われます。
HTTPS では、以下の 2 とおりの方法で SSL/TLS を使用できます。
• まず、最も一般的な方法は、サーバー証明書の認定済み公開キーを使用することを SSL 接続のサーバー側だけに要求することです。たとえば、クライアントは接続先サーバーが正しいことを確認する必要があるが、サーバーは、クライアントを認証する必要がある場合に HTTP 基本認証やフォームベース認証などの従来型認証メカニズムを使用できる場合などが当てはまります。
• 2 番目の方法は、認定済み公開キーの使用を SSL 接続のサーバー側とクライアント側の両方に要求することです。この場合、サーバーは、SSL 接続の確立時に使用されたクライアント証明書に基づいて、クライアントを識別します。これは、SSL 相互認証または SSL 双方向認証とも呼ばれます。Java EE Web アプリケーションの場合は、HTTPS クライアント認証と呼ばれます。
HTTPS クライアント認証は、HTTP プロトコル認証 (フォームベース認証など) のメカニズムの外部で行われますが、HTTP プロトコルより下位で行われます。したがって、HTTP のアプリケーションコードの使用に対しては、透過的な状態を保つことができます (フォームベース認証と異なります)。これを行うには、SSL 接続の確立時にユーザーの証明書と非公開キーを使用できる必要があります。Java アプリケーションでは、必要なキーストアプロパティをプロトコルハンドラに渡すように、Java システムプロパティを設定する必要が生じる場合があります。
ホストベース証明書のほかに、TrustedAuthFilter は双方向 SSL 証明書に基づくクライアントの信頼をサポートするようになりました。この場合、クライアント証明書は特定のユーザーにマップする必要はなく、単に追加の証明書として使用されます (パーティへの招待状やクラブのメンバーシップと同様)。このクライアント証明書が、ユーザーの識別情報を提供します。TrustedAuthFilter の使用の詳細については、該当する Javadoc を参照してください。