第V部: SPNEGO Java GSSメカニズムを使用したセキュアな認証

課題8: SPNEGOとJava Generic Security Services (GSS) APIの使用

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");

これにより、GSSCredentialGSSContextなどを作成する際にSPNEGO OIDを使用できます。

この課題の目標

現在、Java GSSで使用可能なセキュリティ・メカニズムはKerberosのみです。この課題の目標は、Simple and Protected GSS-API Negotiationメカニズム(SPNEGO)などの他のJava GSSメカニズムを使用して、アソシエーションをセキュリティ保護する方法について学習することです。

実行手順

  1. GssSpNegoClient.javaコードを参照してください。

  2. サンプル・コードをコンパイルします。

    % javac GssSpNegoClient.java
    
  3. src/GssSpNegoServer.javaコードを参照してください。

  4. サンプル・コードをコンパイルします。

    % javac GssSpNegoServer.java
    
  5. 新規のウィンドウを起動してサーバーを起動します。

    % xterm &
    % java -Djava.security.auth.login.config=jaas-krb5.conf GssSpNegoServer
    
  6. クライアント・アプリケーションを実行します。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を設定します。



Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.