Java GSS-API および JSSE のどちらも、次の基本的なセキュリティー機能セットを提供します。
ただし、この 2 つには、重要な相違点があります。このドキュメントでは、使用中の環境でどちらのセキュリティーメカニズムを使用するかを判断するのに役立つ、いくつかの相違点を示します。
Java 2 Standard Edition では、GSS-API に Kerberos のサポートが必須のセキュリティーメカニズムとして含まれます。これは、使用するデスクトップが Kerberos をサポートする場合、ユーザーにパスワードの入力を決して求めない、Java GSS-API ベースのアプリケーションを記述できることを意味します。
現在のところ、JSSE は Kerberos ベースの認証を使用する暗号化方式群をサポートしていません。この暗号化方式群のサポートは、Internet Engineering Task Force (IETF) による TLS プロトコルの標準化作業に依存しています。
JSSE は、ソケットベースの API をサポートします。JSSE ソケットは java.net
内のソケットクラスを拡張し、JSSE ソケットファクトリは javax.net
内のソケットファクトリを拡張します。このため、記述したアプリケーションでソケットファクトリを介したセキュリティーの構成が必要な場合、JSSE の方が適しています。JSSE ソケットでは、信頼できる転送手段を使用する必要があります。一般に、実装には TCP が使用されます。
一方、Java GSS-API はトークンベースの API であり、通信の実行はアプリケーションに依存します。これは、アプリケーションが、TCP ソケット、UDP データグラム、または Java GSS-API により生成されたトークンの転送を許可するほかの任意のチャンネルを使用できることを意味します。使用するアプリケーションがさまざまな通信プロトコルを必要とする場合、Java GSS-API の方が適しています。Java GSS-API は、入力および出力ストリームを使用して、トークンの読み取りおよび書き込みを実行できます。ただし、ストリーム自体を設定する必要があります。
Java GSS-API を使用すると、Kerberos の使用時に、クライアントからサーバーへクレデンシャルを委譲できます。アプリケーションが、バックエンド層との通信時に中間的存在がクライアントを装う必要がある多層環境に配備されている場合は、Java GSS-API の方が適しています。
Java GSS-API はトークンベースであるため、特定のメッセージ (すべてではない) を選択的に暗号化できます。使用するアプリケーションでプレーンテキストと暗号テキストのメッセージを混在させる必要がある場合には、Java GSS-API の方が適しています。
JSSE は RFC 2246 に定義されている TLS プロトコルの実装を提供します。Java GSS-API は、RFC 2853 に定義されている GSS-API フレームワークの実装と、RFC 1964 に定義されている Kerberos バージョン 5 メカニズム (Microsoft Windows プラットフォームでは「SSPI with Kerberos」と呼ばれる) の実装を提供します。TLS を使用する必要がある HTTPS などのサーバーの場合、JSSE の方が適しています。SASL を使用する LDAP サーバーなどのほかのサーバーでは、Kerberos 付きの GSS-API が必要な場合があります。この場合、Java GSS-API の方が適しています。