Java GSSは、複数のセキュリティ・メカニズムをサポートできるフレームワークです。GSS-APIの下でセキュリティ・メカニズムとネゴシエーションを行う方法が必要となります。これは、SPNEGOを介して使用できます。
SPNEGOはIETFにおいてRFC 4178に標準化されています。これは、基盤となるセキュリティ・メカニズムとのネゴシエーションを行う場合に使用する擬似セキュリティ・メカニズムです。これを使用すると、クライアントとサーバーに柔軟性が付与され、共通のGSSセキュリティ・メカニズムとセキュアにネゴシエーションを行うことができます。
MicrosoftはSPNEGOを多用しています。SPNEGOは、HTTPを介してMicrosoftサーバーと相互運用したり、Negotiateプロトコルを介してHTTPベースのクロス・プラットフォーム認証をサポートしたりする場合に使用できます。
現在、Java GSSとKerberosを使用する場合は、次のようにKerberos OIDを指定します。
Oid krb5Oid = new Oid("1.2.840.113554.1.2.2");
SPNEGOを使用するには、次のようにSPNEGO OIDを指定するだけです。
Oid spnegoOid = new Oid("1.3.6.1.5.5.2");
これにより、GSSCredential、GSSContextなどを作成する際にSPNEGO OIDを使用できます。
この課題の目標
現在、Java GSSで使用可能なセキュリティ・メカニズムはKerberosのみです。この課題の目標は、Simple and Protected GSS-API Negotiationメカニズム(SPNEGO)などの他のJava GSSメカニズムを使用して、アソシエーションをセキュリティ保護する方法について学習することです。
実行手順
GssSpNegoClient.java
コードを参照してください。
サンプル・コードをコンパイルします。
% javac GssSpNegoClient.java
GssSpNegoServer.java
コードを参照してください。
サンプル・コードをコンパイルします。
% javac GssSpNegoServer.java
新規のウィンドウを起動してサーバーを起動します。
% java -Djava.security.auth.login.config=jaas-krb5.conf GssSpNegoServer
クライアント・アプリケーションを実行します。GssSpNegoClient
は、サービス名とそのサービスが実行されているサーバーの名前の2つのパラメータを取ります。たとえば、サービスがマシンj1hol-001上で実行されているhostの場合は、次を使用します(入力が求められたら、セキュアなパスワードを入力します)。
% java -Djava.security.auth.login.config=jaas-krb5.conf \ GssSpNegoClient host j1hol-001
GssSpNegoServer
を実行したサンプル出力:
Authenticated principal: [host/j1hol-001@J1LABS.EXAMPLE.COM] Waiting for incoming connections... Got connection from client /129.145.128.102 SPNEGO Negotiated Mechanism = 1.2.840.113554.1.2.2 Kerberos V5 Context Established! Client principal is test@J1LABS.EXAMPLE.COM Server principal is host/j1hol-001@J1LABS.EXAMPLE.COM Mutual authentication took place! Received data "Hello There!" of length 12 Confidentiality applied: true Sending: Hello There! Thu May 06 12:11:15 PDT 2005
GssSpNegoClient
を実行したサンプル出力(password
は、前に指定したパスワードに置き換えられます):
Kerberos password for test: password
Authenticated principal: [test@J1LABS.EXAMPLE.COM]
Connected to address j1hol-001/129.145.128.102
SPNEGO Negotiated Mechanism = 1.2.840.113554.1.2.2 Kerberos V5
Context Established!
Client principal is test@J1LABS.EXAMPLE.COM
Server principal is host@j1hol-001
Mutual authentication took place!
Sending message: Hello There!
Will read token of size 93
Received message: Hello There! Thu May 06 12:11:15 PDT 2005
サマリー
この課題では、Kerberosなどのベースとなるセキュリティ・メカニズムとネゴシエーションを行い、ベースとなる認証システムとしてKerberosを使用してセキュアに通信を行うためにSPNEGOとともにJava GSS APIを使用するクライアント/サーバー・アプリケーションを記述する方法について学習しました。
注意:
Microsoftは特定のバリエーションのSPNEGOプロトコルを実装しています。このため、Microsoftと相互運用を行うために、新しいシステム・プロパティsun.security.spnego.msinterop
を使用した個別のモードを追加しました。このプロパティは、デフォルトでtrueに有効にされています。無効にするには、このプロパティを明示的にfalseに設定する必要があります。SPNEGOデバッグを有効にするには、システム・プロパティsun.security.spnego.debug=true
を設定します。