ナビゲーションをスキップ

WebLogic Web サービス プログラマーズ ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

セキュリティのコンフィグレーション

以下の節では、Web サービスに対する各種セキュリティのコンフィグレーションについて説明します。

 


Web サービス セキュリティの概要

WebLogic Web サービスを保護するには、以下の 3 種類の概念的に異なるセキュリティを 1 つまたは複数コンフィグレーションします。

 


どのタイプのセキュリティをコンフィグレーションすべきか

アクセス制御のセキュリティは、「誰が何を実行できるか」という質問の回答となります。まず、Web サービスにアクセスできるロールのリストを指定します。次に、クライアント アプリケーションが Web サービスのオペレーションを呼び出そうとするときに、そのクライアントは WebLogic Server に対して自身を認証し、権限がある場合はその呼び出しを続行することができます。アクセス制御セキュリティは、WebLogic Server のリソースのみを保護します。つまり、アクセス制御のセキュリティしかコンフィグレーションされていない場合は、クライアント アプリケーションと WebLogic Server の接続が保護されず、SOAP メッセージはプレーン テキストになります。

転送レベルのセキュリティでは、クライアント アプリケーションと WebLogic Server の間の接続がセキュア ソケット レイヤ (SSL) で保護されます。SSL では、ネットワーク接続している 2 つのアプリケーションが互いの ID を認証できるようにするとともに、アプリケーション間でやりとりされるデータを暗号化することでセキュアな接続が実現します。認証を使用すると、サーバは (場合によってはクライアントも) ネットワーク接続の相手側アプリケーションの ID を検証できます。ネットワーク経由で送信されるデータは暗号化されるので、予定されている宛先以外には解釈できません。

ただし、転送レベルのセキュリティでは接続そのものしか保護されません。つまり、クライアントと WebLogic Server の間にルータやメッセージ キューなどの仲介機能がある場合、その仲介機能は SOAP メッセージをプレーン テキストで取得します。仲介機能から次の送信先にメッセージが送信されたとき、その受信側では元々そのメッセージがどこから来たのかわかりません。また、SSL で使用される暗号化は「オール オア ナッシング」です。つまり、SOAP メッセージの全体が暗号化されるか、あるいはまったく暗号化されないかのいずれかになります。SOAP メッセージの一部だけを選択して暗号化することはできません。

メッセージレベルのセキュリティでは、SSL のすべてのセキュリティ上のメリットに、柔軟性と機能が追加されます。メッセージレベルのセキュリティはエンド ツー エンドです。つまり、SOAP メッセージは転送の過程でいくつ仲介機能があっても保護されます。接続だけでなく、SOAP メッセージ自体がデジタル署名および暗号化されます。さらに、メッセージの一部のみを署名または暗号化するように指定することもできます。

 


メッセージレベルのセキュリティ (デジタル署名と暗号化) のコンフィグレーション

メッセージレベルのセキュリティでは、クライアント アプリケーションとそれが呼び出す Web サービスの間の SOAP メッセージに対してデジタル署名、暗号化、またはその両方のいずれを行うかを指定します。

WebLogic Web サービスには、以下の 2004 年 3 月付の OASIS 標準 Web Services Security 1.0 仕様が実装されています。

これらの仕様は、主にセキュリティ トークンの伝播、メッセージの整合性、およびメッセージの機密性の 3 つのメカニズムを提供します。これらのメカニズムは別々に (ユーザ認証でのユーザ名トークンの受け渡しなど)、または組み合わせて (SOAP メッセージのデジタル署名と暗号化、認証でのユーザによる X.509 証明書の使用の指定など) 使用できます。

WS-Policy 仕様 (2004 年 9 月付) で指定されているように、セキュリティ ポリシー ステートメントを格納する 1 つまたは複数の WS-Policy ファイルを添付することにより、Web サービスのメッセージレベルのセキュリティをコンフィグレーションします。Web サービス ランタイムにおけるこれらのファイルの使用方法については、「メッセージレベルのセキュリティ コンフィグレーションに対する WS-Policy ファイルの使い方の概要」を参照してください。

簡単なメッセージレベルのセキュリティをコンフィグレーションする場合に実行する基本的な手順については、「簡単なメッセージレベルのセキュリティのコンフィグレーション : 主な手順」を参照してください。この節では、Web サービス ランタイムに対するメッセージレベルのセキュリティのコンフィグレーション、特定の Web サービスに対するメッセージレベルのセキュリティのコンフィグレーション、およびそのサービスを呼び出すクライアント アプリケーションのコーディング方法について説明します。

注意 : SOAP 添付ファイルに対しては、デジタル署名も暗号化も行うことができません。

主な使い方

Web Services Security: SOAP Message Security 仕様の BEA 実装は、以下の使い方をサポートするように設計されています。

メッセージレベルのセキュリティ コンフィグレーションに対する WS-Policy ファイルの使い方の概要

WS-Policy ファイルを使用して、WebLogic Web サービスのメッセージレベルのセキュリティの詳細を指定します。WS-Policy 仕様では、Web サービスのポリシーを記述して通信するための、汎用的なモデルと XML 構文が提供されています。

メッセージレベルのセキュリティに使用される WS-Policy ファイルは、オペレーションを呼び出した結果として発生する SOAP メッセージに対してデジタル署名または暗号化を行うかどうかの明記とその方法が記述された XML ファイルです。また、クライアント アプリケーションがユーザ名、SAML、または X.509 の各トークンを使用して自身を認証することの指定もできます。

注意 : WebLogic Web サービスのメッセージレベルのセキュリティをコンフィグレーションするための WS-Policy ファイルで使用されるポリシー アサーションは、Web Services Security Policy Language (WS-SecurityPolicy) 仕様 (2002 年 12 月 18 日付) で説明されているアサーションに基づいています。つまり、WebLogic Server のアサーションの正確な構文と使用方法は、この仕様で説明されているアサーションとは異なっていますが、意味上の違いはありません。このリリースの WebLogic Server のアサーションは、最新の仕様 (2005 年 7 月 13 日付) には基づいていません。

Web サービスに関連付けられる WS-Policy ファイルの名前は、JWS ファイル内の @Policy および @Policies JWS アノテーションを使用して指定します。Web サービスに指定できる WS-Policy ファイルの数に制限はありません。ただし、アサーションが互いに矛盾しないように管理者が確認する必要があります。WS-Policy ファイルは、JWS ファイルのクラスレベルでも、メソッドレベルでも指定できます。

WebLogic Server には、ユーザ独自の WS-Policy ファイルを作成しない場合に JWS ファイルで指定できる、3 つの簡単な WS-Policy ファイルが用意されています。特定のセキュリティ ニーズがない場合はできる限り、以下のあらかじめパッケージ化されているファイルを使用することをお勧めします。

あらかじめパッケージ化されている 3 つの WS-Policy ファイルの内容については、「Auth.xml」、「Sign.xml」、および「Encrypt.xml」を参照してください。

WebLogic Web サービス ランタイムでは、抽象および具象という若干異なる 2 種類の WS-Policy ファイルが認識されます。

抽象 WS-Policy ファイルでは、認証、暗号化、およびデジタル署名に使用されるセキュリティ トークンが明示的に指定されません。Web サービス ランタイムは Web サービスがデプロイされるときにセキュリティ トークンを決定します。具体的にはつまり、WS-Policy ファイルの <Identity> および <Integrity> 要素 (またはアサーション) には <SupportedTokens><SecurityToken> 子要素が含まれておらず、<Confidentiality> 要素には <KeyInfo><SecurityToken> 子要素が含まれていません。

具象 WS-Policy ファイルでは、Web サービスのプログラミング時にセキュリティ トークンの詳細が明示的に指定されます。サービスのプログラミング時に、認証のタイプの詳細 (x509 トークンまたは SAML トークンの使用など) や、キーストアの複数のプライベート キーと証明書のペアが暗号化とデジタル署名に使用されるかどうかなどが分かっている場合に、プログラマは具象 WS-Policy ファイルを作成します。

あらかじめパッケージ化されている 3 つの WS-Policy ファイルは、すべて抽象ファイルです。Web サービスがこれらの WS-Policy ファイルのみに関連付けられている場合は、クライアント認証でユーザ名トークンが必要になります。このリリースの WebLogic Server の Web サービスでは、暗号化とデジタル署名用のトークン タイプは 1 つしかサポートされていません (X.509)。つまり、<Integrity> 要素および <Confidentiality> 要素が使用される場合でも、抽象 WS-Policy ファイルと具象 WS-Policy ファイルは結果的に同じになります。

Web サービスが抽象 WS-Policy ファイルに関連付けられ、そのファイルが WSDL の添付ファイルとして公開される場合 (デフォルトの動作)、Web サービスのアーカイブ ファイル (JAR または WAR) にパッケージ化される静的 WSDL ファイルは、デプロイされた Web サービスの動的 WSDL ファイルとは若干異なります。その違いは、抽象的な静的 WSDL には特定の <SecurityToken> 要素が含まれていないのに、動的 WSDL にはこれらの要素が含まれていることです。サービスがデプロイされるときに Web サービス ランタイムによってこれらの要素が自動的に設定されるからです。このため、clientgen Ant タスクを使用して Web サービスの呼び出しに使用される JAX-RPC スタブを生成する場合には、必ず動的 WSDL を指定してください。そうしないと、オペレーションを呼び出そうとしたときに実行時エラーが発生します。デプロイされた Web サービスの動的 WSDL ファイルの表示については、「Web サービスの WSDL の参照」を参照してください。

また、実行時に Web サービスのメッセージレベルのセキュリティをコンフィグレーションすることもできます。詳細については、「Administration Console を使用した実行時の WS-Policy ファイルの関連付け」を参照してください。

Auth.xml

<?xml version="1.0"?>
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wssp="http://www.bea.com/wls90/security/policy"
  >
  <wssp:Identity/>
</wsp:Policy>

Sign.xml

<?xml version="1.0"?>
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wssp="http://www.bea.com/wls90/security/policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wls="http://www.bea.com/wls90/security/policy/wsee#part"
>
  <wssp:Integrity>
    <wssp:SignatureAlgorithm URI="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
    <wssp:CanonicalizationAlgorithm 
URI="http://www.w3.org/2001/10/xml-exc-c14n#"/>
    <wssp:Target>
<wssp:DigestAlgorithm URI="http://www.w3.org/2000/09/xmldsig#sha1" />
<wssp:MessageParts
Dialect="http://www.bea.com/wls90/security/policy/wsee#part">
wls:SystemHeaders()
</wssp:MessageParts>
</wssp:Target>
    <wssp:Target>
<wssp:DigestAlgorithm URI="http://www.w3.org/2000/09/xmldsig#sha1" />
<wssp:MessageParts
Dialect="http://www.bea.com/wls90/security/policy/wsee#part">
wls:SecurityHeader(wsu:Timestamp)
</wssp:MessageParts>
</wssp:Target>
    <wssp:Target>
<wssp:DigestAlgorithm URI="http://www.w3.org/2000/09/xmldsig#sha1" />
<wssp:MessageParts
Dialect="http://schemas.xmlsoap.org/2002/12/wsse#part">
wsp:Body()
</wssp:MessageParts>
</wssp:Target>
  </wssp:Integrity>
  <wssp:MessageAge/>
</wsp:Policy>

Encrypt.xml

<?xml version="1.0"?>
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wssp="http://www.bea.com/wls90/security/policy"
>
  <wssp:Confidentiality>
<wssp:KeyWrappingAlgorithm URI="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
<wssp:Target>
<wssp:EncryptionAlgorithm
URI="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
<wssp:MessageParts
Dialect="http://schemas.xmlsoap.org/2002/12/wsse#part">
wsp:Body()
</wssp:MessageParts>
</wssp:Target>
<wssp:KeyInfo/>
</wssp:Confidentiality>
</wsp:Policy>

簡単なメッセージレベルのセキュリティのコンフィグレーション : 主な手順

以下では、Web サービス セキュリティ ランタイムと特定の WebLogic Web サービスに対して簡単なメッセージレベルのセキュリティをコンフィグレーションする手順と、その Web サービスのオペレーションを呼び出すクライアント アプリケーションをコンフィグレーションする手順について説明します。このマニュアルでは、簡単なメッセージレベルのセキュリティを次のように定義しています。

上記の定義の一部に関する詳細と、簡単なメッセージレベルのセキュリティの使用例に基づいて Web サービス セキュリティを追加する使用例については、後半の節で説明します。

次の手順では、WebLogic Web サービスを実装する JWS ファイルがすでに作成済みであることを前提として、SOAP メッセージにデジタル署名と暗号化を行うようにそのファイルを更新します。また、Ant ビルド スクリプトを使用して Web サービスを反復的に開発することと、新しい情報で更新できる作業用の build.xml ファイルがあることも前提となっています。さらに、保護されていない Web サービスを呼び出すクライアント アプリケーションも用意されているものとします。これらの前提条件が満たされていない場合は、以下を参照してください。

  1. JWS ファイルを更新します。WebLogic 固有の @Policy および @Policies JWS アノテーションを追加して、Web サービス全体または特定のオペレーションに添付されるあらかじめパッケージ化されている WS-Policy ファイルを指定します。
  2. WS-Policy ファイルの指定方法については、「@Policy および @Policies アノテーションで JWS ファイルを更新する」を参照してください。この基本的な手順の場合は、あらかじめパッケージ化されている WS-Policy ファイル (Auth.xmlSign.xml、および Encrypt.xml) を指定する手順に従うだけです。

  3. 通常の反復的な開発プロセスの一部として、Web サービスを再コンパイルして再デプロイします。
  4. Java から開始する WebLogic Web サービスの反復的な開発 : 主な手順」を参照してください。

  5. クライアント アプリケーションが使用するキーストアを作成します。アプリケーション ユーザごとにクライアント キーストアを 1 つ作成することをお勧めします。
  6. この手順には、Cert Gen ユーティリティまたは Sun Microsystem の keytool ユーティリティを使用します。開発が目的の場合は、keytool ユーティリティを使用すると簡単に開始できます。

    詳細については、「プライベート キー、デジタル証明書、信頼性のある認証局の取得」を参照してください。

  7. プライベート キーとデジタル証明書のペアを作成し、クライアント キーストアにロードします。同じペアを使用して、クライアントの SOAP リクエストにデジタル署名を行い、WebLogic Server からの SOAP 応答を暗号化します。
  8. 証明書のキーの用途で、暗号化とデジタル署名の両方での使用が指定されていることを確認してください。WebLogic Server でクライアントの証明書が有効であることを確認する方法については、「WebLogic Server でクライアントの証明書を検証できることを確認する」も参照してください。

    警告 : キーの長さは 1024 ビット以上にする必要があります。

    この手順には、Sun Microsystem の keytool ユーティリティを使用します。

    詳細については、「プライベート キー、デジタル証明書、信頼性のある認証局の取得」を参照してください。

  9. Administration Console を使用して、セキュリティ レルムに認証用のユーザを作成します。
  10. 詳細については、「ユーザ、グループ、セキュリティ ロール」を参照してください。

  11. メッセージ保護された Web サービスを呼び出すように、クライアント アプリケーションを更新します。
  12. 詳細については、「メッセージ保護された Web サービスを呼び出すようにクライアント アプリケーションを更新する」を参照してください。

簡単なメッセージレベルのセキュリティの使用例に基づいて Web サービス セキュリティを追加する使用例については、以下の節を参照してください。

WebLogic Server でクライアントの証明書を検証できることを確認する

クライアントが SOAP リクエストのデジタル署名に使用し、次に WebLogic Server がクライアントへの SOAP 応答の暗号化に使用する X.509 証明書を WebLogic Server で検証できることを確認しておく必要があります。次のいずれかの方法で行います。

詳細については、「SSL 証明書の検証」を参照してください。

@Policy および @Policies アノテーションで JWS ファイルを更新する

JWS ファイルで @Policy アノテーションおよび @Policies アノテーションを使用して、Web サービスに 1 つまたは複数の WS-Policy ファイルが添付されていることを指定できます。これらのアノテーションは、クラス レベルまたはメソッド レベルのいずれかで使用できます。

@Policies アノテーションは、複数の @Policy アノテーションをグループ化します。複数の WS-Policy ファイルをクラスまたはメソッドに添付する場合は、@Policies アノテーションを使用してください。WS-Policy ファイルを 1 つだけ添付する場合は、そのファイル自体に対して @Policy を使用します。

@Policy アノテーションでは、1 つの WS-Policy ファイル、その場所、ポリシーが SOAP のリクエスト メッセージ、応答メッセージ、またはその両方のいずれに適用されるか、およびその WS-Policy ファイルをサービスの公開 WSDL に添付するかどうかを指定します。

uri 属性を使用して、WS-Policy ファイルの場所を以下のように指定します。

@Policy アノテーションで以下の属性を設定することもできます。

次の例では、@Policy および @Policies JWS アノテーションの使い方を示します。該当する個所は太字で表示しています。

package examples.webservices.security_jws;
import weblogic.jws.WLHttpTransport;
import weblogic.jws.Policies;
import weblogic.jws.Policy;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.soap.SOAPBinding;
/**
*
*/
@WebService(name="SecureHelloWorldPortType",
serviceName="SecureHelloWorldService",
targetNamespace="http://www.bea.com")
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,
use=SOAPBinding.Use.LITERAL,
parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
@WLHttpTransport(contextPath="SecureHelloWorldService",
serviceUri="SecureHelloWorldService",
portName="SecureHelloWorldServicePort")
@Policies({
@Policy(uri="policy:Auth.xml", direction=Policy.Direction.inbound),
@Policy(uri="policy:Sign.xml"),
@Policy(uri="policy:Encrypt.xml")})
public class SecureHelloWorldImpl {
  @WebMethod()
public String sayHello(String s) {
return "Hello " + s;
}
}

この例では、3 つの WS-Policy ファイルがクラス レベルで Web サービスに添付されています。つまり、3 つすべての WS-Policy ファイルは Web サービスのすべてのパブリック オペレーションに適用されます。指定された WS-Policy ファイルは、WebLogic Server であらかじめパッケージ化されているファイルです。開発者は独自のファイルを作成する必要も、対応するアーカイブにファイルをパッケージ化する必要もありません。

Auth.xml ファイルは、direction 属性で指定されているように、リクエスト (着信) SOAP メッセージのみに適用されます。このため、クライアント アプリケーションのみでユーザ名トークンの指定が必要になります。WebLogic Server が呼び出しに応答するときにはユーザ名トークンは指定されません。Sign.xml WS-Policy ファイルは、SOAP のリクエスト メッセージおよび応答メッセージの両方の本文と WebLogic システム ヘッダにデジタル署名が行われることを指定しています。Encrypt.xml ポリシー ファイルは、SOAP のリクエスト メッセージおよび応答メッセージの両方の本文が暗号化されることを指定しています。

メッセージ保護された Web サービスを呼び出すようにクライアント アプリケーションを更新する

メッセージ保護された Web サービスを呼び出すように Java コードを更新する場合には、クライアントのキーストアからプライベート キーとデジタル証明書のペアをロードし、その情報を、WS-Policy で必要とされている場合はユーザ認証用のユーザ名およびパスワードとともに、呼び出されるセキュアな WebLogic Web サービスに渡す必要があります。

Web サービスの WS-Policy ファイルで SOAP リクエストを暗号化するように指定されている場合、Web サービス クライアント ランタイムはサービスの WSDL に添付されている WS-Policy ファイルからサーバの証明書を自動的に取得し、それを暗号化に使用します。ただし、WS-Policy ファイルが WSDL に添付されていない場合や、WSDL 自体を使用できない場合には、クライアント アプリケーションは WS-Policy ファイルのクライアントサイドのコピーを使用する必要があります。詳細については、「クライアントサイド セキュリティ WS-Policy ファイルの使用」を参照してください。

次の例では、「@SecurityRoles および @SecurityIdentity アノテーションでの JWS ファイルの更新」の JWS ファイルで記述されているメッセージ保護された WebLogic Web サービスを呼び出す Java クライアント アプリケーションを示します。クライアント アプリケーションは、以下の 5 つの引数を取ります。

サンプル クライアント アプリケーションのセキュリティ固有のコードは太字で表示し、例の後で説明します。

package examples.webservices.security_jws.client;
import weblogic.security.SSL.TrustManager;
import weblogic.xml.crypto.wss.provider.CredentialProvider;
import weblogic.xml.crypto.wss.WSSecurityContext;
import weblogic.wsee.security.bst.ClientBSTCredentialProvider;
import weblogic.wsee.security.unt.ClientUNTCredentialProvider;
import javax.xml.rpc.Stub;
import java.util.List;
import java.util.ArrayList;
import java.security.cert.X509Certificate;
/**
 * Copyright (c) 2004 by BEA Systems.All Rights Reserved.
 */
public class SecureHelloWorldClient {
public static void main(String[] args) throws Throwable {
    //ユーザ名トークンのユーザ名またはパスワード
String username = args[0];
String password = args[1];
    //クライアントのプライベート キー ファイル
String keyFile = args[2];
    //クライアントの証明書
String clientCertFile = args[3];
    String wsdl = args[4];
    SecureHelloWorldService service = new SecureHelloWorldService_Impl(wsdl);
    SecureHelloWorldPortType port = service.getSecureHelloWorldServicePort();
    //資格プロバイダを作成し、それをスタブに設定する
List credProviders = new ArrayList();
    //クライアントサイドの BinarySecurityToken 資格プロバイダ -- x509
CredentialProvider cp = new ClientBSTCredentialProvider(clientCertFile, keyFile);
credProviders.add(cp);
    //クライアントサイドの UsernameToken 資格プロバイダ
cp = new ClientUNTCredentialProvider(username, password);
credProviders.add(cp);
    Stub stub = (Stub)port;
stub._setProperty(WSSecurityContext.CREDENTIAL_PROVIDER_LIST, credProviders);
    stub._setProperty(WSSecurityContext.TRUST_MANAGER,
new TrustManager(){
public boolean certificateCallback(X509Certificate[] chain, int validateErr){
return true;
}
} );
    String response = port.sayHello("World");
System.out.println("response = " + response);
}
}

上記のコードで注目すべき主な点は以下のとおりです。

用意されている SSL ペア以外のキー ペアの使用

簡単なメッセージレベルのセキュリティのコンフィグレーション : 主な手順」で説明した、簡単なメッセージレベルのコンフィグレーション手順では、Web サービス ランタイムが WebLogic Server に用意されているプライベート キーと X.509 証明書のペアを使用することが前提となっています。SSL 用のコア セキュリティ サブシステムでも同じキー ペアが使用されます。このキー ペアは主にデモまたはテスト目的用に用意されています。プロダクション環境では、Web サービス ランタイムは通常、独自のプライベート キーとデジタル証明書のペアを 2 つ使用します。1 つは SOAP メッセージの署名用、もう 1 つは SOAP メッセージの暗号化用です。

以下では、これらを使用できるようにするための追加の手順について説明します。

  1. Web サービス ランタイムで使用されるプライベート キーとデジタル証明書のペアを 2 つ取得します。ペアの 1 つは SOAP メッセージのデジタル署名に使用され、もう 1 つは SOAP メッセージの暗号化に使用されます。
  2. 必須ではありませんが、WebLogic Web サービスのみが使用するペアを 2 つ取得することをお勧めします。両方の証明書のキーの用途がコンフィグレーションの目的と一致していることを確認してください。たとえば、証明書を暗号化に使用するように指定する場合は、証明書のキーの用途が暗号用として指定されているか、または用途が定義されていないことを確認します。そうでない場合、Web サービス セキュリティ ランタイムによって証明書が拒否されます。

    警告 : キーの長さは 1024 ビット以上にする必要があります。

    この手順には、Cert Gen ユーティリティまたは Sun Microsystem の keytool ユーティリティを使用します。開発が目的の場合は、keytool ユーティリティを使用すると簡単に開始できます。

    詳細については、「プライベート キー、デジタル証明書、信頼性のある認証局の取得」を参照してください。

  3. この時点で存在していない場合は、WebLogic Server のカスタム ID キーストアを作成し、前の手順で取得したプライベート キーとデジタル証明書のペアをその ID キーストアにロードします。
  4. SSL 用に WebLogic Server をすでにコンフィグレーションしてある場合は、この手順で使用できる ID キーストアがすでに作成されています。

    この手順には、WebLogic の ImportPrivateKey ユーティリティおよび Sun Microsystem の keytool ユーティリティを使用できます。開発が目的の場合は、keytool ユーティリティを使用すると簡単に開始できます。

    詳細については、「キーストアの作成およびプライベート キーと信頼性のある認証局のキーストアへのロード」を参照してください。

  5. Administration Console を使用して、前の手順で作成したキーストアを指定するように WebLogic Server をコンフィグレーションします。WebLogic Server 用にコンフィグレーションしたキーストアをすでに使用している場合、この手順を実行する必要はありません。
  6. 詳細については、「プロダクション用のキーストアのコンフィグレーション」を参照してください。

  7. Administration Console を使用して、デフォルトの Web サービス セキュリティ コンフィグレーションを作成します。このコンフィグレーションの名前は default_wss にする必要があります。デフォルトの Web サービス セキュリティ コンフィグレーションは、別のコンフィグレーションを使用するように明示的にプログラミングされていない限り、ドメイン内のすべての Web サービスで使用されます。
  8. Web サービス セキュリティ コンフィグレーションの作成」を参照してください。

  9. プライベート キーとデジタル証明書のペアの一方を SOAP メッセージのデジタル署名に使用するように、前の手順で作成したデフォルトの Web サービス セキュリティ コンフィグレーションを更新します。
  10. SOAP メッセージのデジタル署名で使用するキーストアの作成」を参照してください。この手順では、キーストアとキー ペアの識別に使用されるプロパティを作成するときに各プロパティの正確な値 (IntegrityKeyStoreIntegrityKeyStorePassword など) を [名前] フィールドに入力します。ただし、[値] フィールドには独自に作成したキーストアとキー ペアを識別する値を入力します。

  11. 同様に、プライベート キーとデジタル証明書のペアのもう一方を SOAP メッセージの暗号化に使用するように、前の手順で作成したデフォルトの Web サービス セキュリティ コンフィグレーションを更新します。
  12. SOAP メッセージの暗号化で使用するキーストアの作成」を参照してください。この手順では、キーストアとキー ペアの識別に使用されるプロパティを作成するときに各プロパティの正確な値 (ConfidentialityKeyStoreConfidentialityKeyStorePassword など) を [名前] フィールドに入力します。ただし、[値] フィールドには独自に作成したキーストアとキー ペアを識別する値を入力します。

SOAP メッセージの有効期限の設定

WS-Policy ファイルの <MessageAge> 要素では、WS-Policy ファイルに関連付けられている Web サービスを呼び出した結果として発生する SOAP メッセージに有効期限があるかどうかを指定します。有効期限とメッセージに含まれる作成時のタイムスタンプに基づいて期限切れになった SOAP リクエストは WebLogic Server で拒否されます。また、サービスに関連付けられている Web サービス セキュリティ コンフィグレーションを作成および更新する Administration Console を使用してメッセージの有効期限をコンフィグレーションすることもできます。

以下の項目では、WebLogic Web サービス ランタイムが特定の Web サービスの SOAP メッセージの有効期限を決定する方法について説明します。

次の手順では、「簡単なメッセージレベルのセキュリティのコンフィグレーション : 主な手順」での手順がすでに実行されていることを前提として、メッセージの有効期限を設定します。

SOAP メッセージの有効期限を設定するには、次の手順に従います。

  1. Web サービスに関連付けられている WS-Policy ファイルに <MessageAge> アサーションが含まれていることを確認します。あらかじめパッケージ化されている Sign.xml ファイルには、属性のない状態の <MessageAge> アサーションが含まれています。
  2. カスタム WS-Policy ファイルに <MessageAge> アサーションを追加する場合は、Age 属性を指定してください。設定すると、この属性の値が有効期限になります。この値は、Administration Console でオーバーライドされません。デフォルトの 60 秒に設定するために属性を指定しない場合は、そのままでかまいません。ただし、デフォルト値を変更する場合は、次の手順に進みます。

  3. まだ作成していない場合は、Administration Console を使用して、デフォルトの Web サービス セキュリティ コンフィグレーションを作成します。このコンフィグレーションの名前は default_wss にする必要があります。デフォルトの Web サービス セキュリティ コンフィグレーションは、別のコンフィグレーションを使用するように明示的にプログラミングされていない限り、ドメイン内のすべての Web サービスで使用されます。
  4. Web サービス セキュリティ コンフィグレーションの作成」を参照してください。

  5. 次の手順に従って、別の有効期限を指定するように、前の手順で作成したデフォルトの Web サービス セキュリティ コンフィグレーションを更新します。
    1. [ドメインWeb サービス セキュリティ] をクリックします。
    2. [Web サービス セキュリティ コンフィグレーション] テーブルで default_wss をクリックします。
    3. [Web サービス セキュリティタイムスタンプ] をクリックします。
    4. [有効期間] フィールドを新しい有効期限 (秒単位) で更新します。
    5. 必要に応じて、その他のフィールドを更新します。これらのフィールドの詳細については、右上隅の [ヘルプ] リンクをクリックしてください。
    6. [保存] をクリックします。

カスタム WS-Policy ファイルの作成と使用

WebLogic Server には、ほとんどのプログラマの通常のセキュリティ ニーズを満たす 3 つの WS-Policy ファイルが用意されていますが、追加のコンフィグレーションが必要な場合は、独自の WS-Policy ファイルを作成して使用することもできます。たとえば、以下の場合に独自の WS-Policy ファイルを作成する必要があります。

WS-Policy ファイルの一般的な情報とメッセージレベルのセキュリティ コンフィグレーションでのそれらの使用方法については、「メッセージレベルのセキュリティ コンフィグレーションに対する WS-Policy ファイルの使い方の概要」を参照してください。

カスタム WS-Policy ファイルを作成する場合には、あらかじめパッケージ化されているファイルと同じように 3 つの主なセキュリティ カテゴリ (認証、暗号化、および署名) を 3 つの別々の WS-Policy ファイルに分けることもできますし、3 つのカテゴリすべてを含む 1 つの WS-Policy ファイルを作成することもできます。また、認証など 1 つのカテゴリだけを変更するカスタム WS-Policy ファイルを作成し、その他のカテゴリについてはあらかじめパッケージ化されているファイル (Encrypt.xml および Sign.xml) を使用することもできます。つまり、Web サービスに関連付ける WS-Policy ファイルの数および内容は、適宜組み合わせることができます。ただしこの場合は、それらの複数のファイルが互いに矛盾していないことを常に確認する必要があります。

WS-Policy ファイルのルート要素は <Policy> でなければなりません。また、この要素には次のネームスペース宣言が含まれている必要があります。

<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wssp="http://www.bea.com/wls90/security/policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wls="http://www.bea.com/wls90/security/policy/wsee#part"
>

WS-Policy ファイルでは、<Policy> ルート要素の以下の子要素を使用できます。これらの要素の詳細なリファレンス情報については、「セキュリティ ポリシー アサーションのリファレンス」を参照してください。

ID として SAML トークンを指定するためのカスタム WS-Policy ファイルの例については、「カスタム WS-Policy ファイルの例」を参照してください。<Integrity> 要素に <KeyInfo> 子要素が、<Confidentiality> 要素に <SupportedTokens> 子要素が含まれていないため、ファイルのこれらのセクションは抽象セクションです。<Identity> 要素には、SAML トークンが含まれているので、ID セクションは具象セクションです。

あらかじめパッケージ化されている抽象 WS-Policy ファイルをテンプレートとして使用して、独自のカスタム ファイルを作成することもできます。「Auth.xml」、「Sign.xml」、および「Encrypt.xml」を参照してください。

カスタム WS-Policy ファイルの例

<<?xml version="1.0"?>
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wssp="http://www.bea.com/wls90/security/policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wls="http://www.bea.com/wls90/security/policy/wsee#part"
>
  <wssp:Identity>
<wssp:SupportedTokens>
<wssp:SecurityToken TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-2004-01-saml-token-profile-1.0#SAMLAssertionID">
<wssp:Claims>
<wssp:ConfirmationMethod>sender-vouches</wssp:ConfirmationMethod>
</wssp:Claims>
</wssp:SecurityToken>
</wssp:SupportedTokens>
</wssp:Identity>
  <wssp:Integrity>
    <wssp:SignatureAlgorithm URI="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<wssp:CanonicalizationAlgorithm
URI="http://www.w3.org/2001/10/xml-exc-c14n#"/>
    <wssp:Target>
<wssp:DigestAlgorithm
URI="http://www.w3.org/2000/09/xmldsig#sha1" />
<wssp:MessageParts
Dialect="http://schemas.xmlsoap.org/2002/12/wsse#part">
wsp:Body()
</wssp:MessageParts>
</wssp:Target>
    <wssp:Target>
<wssp:DigestAlgorithm URI="http://www.w3.org/2000/09/xmldsig#sha1" />
<wssp:MessageParts
Dialect="http://www.bea.com/wls90/security/policy/wsee#part">
wls:SecurityHeader(Assertion)
</wssp:MessageParts>
</wssp:Target>
  </wssp:Integrity>
  <wssp:Confidentiality>
    <wssp:KeyWrappingAlgorithm URI="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
    <wssp:Target>
<wssp:EncryptionAlgorithm
URI="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
<wssp:MessageParts
Dialect="http://www.bea.com/wls90/security/policy/wsee#part">
wls:SecurityHeader(Assertion)
</wssp:MessageParts>
</wssp:Target>
    <wssp:Target>
<wssp:EncryptionAlgorithm
URI="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
<wssp:MessageParts
Dialect="http://schemas.xmlsoap.org/2002/12/wsse#part">
wsp:Body()</wssp:MessageParts>
</wssp:Target>
    <wssp:KeyInfo />
</wssp:Confidentiality>
  <wssp:MessageAge/>
</wsp:Policy>

Administration Console を使用した実行時の WS-Policy ファイルの関連付け

簡単なメッセージレベルのセキュリティのコンフィグレーション : 主な手順」で説明した、簡単なメッセージレベルのコンフィグレーション手順では、Web サービスを実装する JWS ファイルで @Policy および @Policies JWS アノテーションを使用して、サービスに関連付けられている 1 つまたは複数の WS-Policy ファイルを指定する方法について説明しています。つまり、これは Web サービスのプログラミング時には Web サービスとそのオペレーションに関連付ける WS-Policy ファイルをあらかじめ認識しておく必要があることを示します。しかし、常にあらかじめ WS-Policy ファイルを認識できるとは限りません。そのため、Web サービスをデプロイした後で Administration Console を使用して実行時に WS-Policy ファイルを関連付けることもできます。

JWS ファイルで @Policy JWS アノテーションも @Policies JWS アノテーションも使用せずに、Administration Console を使用して実行時に WS-Policy ファイルを関連付けることもできますし、これらのアノテーションを使用して一部の WS-Policy ファイルを指定し、追加の WS-Policy ファイルを実行時に関連付けることもできます。ただし、いったん JWS アノテーションを使用して WS-Policy ファイルを関連付けると、その関連付けは実行時に Administration Console を使用して変更することはできません。

Administration Console では、ファイル内のポリシー アサーションが互いに矛盾していても、JWS アノテーションに関連付けられている WS-Policy ファイル内のアサーションと矛盾していても、実行時に WS-Policy ファイルを Web サービスやそのオペレーションにいくつでも関連付けることができます。ただし、関連付けられた複数の WS-Policy ファイルが連携できるように、管理者が確認する必要があります。何らかの矛盾がある場合は、クライアント アプリケーションが Web サービスのオペレーションを呼び出すときに、WebLogic Server から実行時エラーが返されます。

Administration Console を使用して実行時に WS-Policy ファイルを関連付ける詳細な手順については、「WS-Policy ファイルと Web サービスとの関連付け」を参照してください。

Security Assertion Markup Language (SAML) トークンの ID としての使用

簡単なメッセージレベルのセキュリティのコンフィグレーション : 主な手順」で説明した、簡単な Web サービスのコンフィグレーション手順では、ユーザはユーザ名トークンを使用して自身を認証することが前提となっています。WebLogic Server は Web Services Security 仕様の Web Services Security: SAML Token Profile を実装しているため、この節で説明するように、ユーザは Web サービスのオペレーションの呼び出し時に SOAP メッセージで SAML トークンを使用して自身を認証することもできます。

SAML トークンの使用はサーバ間で機能します。つまり、ある WebLogic Server インスタンスで実行されているクライアント アプリケーションが、ID として SAML を使用して別の WebLogic Server インスタンスで実行されている Web サービスを呼び出します。クライアント アプリケーション自体が Web サービスであるため、Web サービス セキュリティ ランタイムによってすべての SAML プロセスが処理されます。

ID として SAML トークンを要求するように Web サービスをコンフィグレーションする場合には、以下のいずれかの確認メソッドを指定できます。

これらの確認メソッドの詳細については、Web Services Security: SAML Token Profile を参照してください。

注意 : この節では、読者が SAML の基礎と、SAML を WebLogic Server のコア セキュリティに関連付ける方法を理解していることを前提としています。一般的な情報については、「Security Assertion Markup Language (SAML)」を参照してください。次の手順では、「簡単なメッセージレベルのセキュリティのコンフィグレーション : 主な手順」での手順がすでに実行されていることを前提として、ユーザ名トークンではなく、SAML トークンを ID として使用できるようにします。

SAML トークンを ID として使用するには、次の手順に従います。

  1. Administration Console を使用して、SAML ID アサーション プロバイダおよび SAML 資格マッピング プロバイダをコンフィグレーションします。この手順により、WebLogic Server コア セキュリティ サブシステムがコンフィグレーションされます。詳細については、以下を参照してください。
  2. ID として SAML を使用することを指定するカスタム WS-Policy ファイルを作成します。
  3. 具体的には、以下のことを行います。

    たとえば次のように指定します。

    <?xml version="1.0"?>
    <wsp:Policy
    xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
    xmlns:wssp="http://www.bea.com/wls90/security/policy"
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    xmlns:wls="http://www.bea.com/wls90/security/policy/wsee#part"
    >
      <wssp:Identity>
    <wssp:SupportedTokens>
    <wssp:SecurityToken
    TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-2004-01-saml-token-profile-1.0#SAMLAssertionID">
    <wssp:Claims>
    <wssp:ConfirmationMethod>sender-vouches</wssp:ConfirmationMethod>
    </wssp:Claims>
    </wssp:SecurityToken>
    </wssp:SupportedTokens>
    </wssp:Identity>
    </wsp:Policy>

    独自の WS-Policy ファイルの作成に関する詳細については、「カスタム WS-Policy ファイルの作成と使用」を参照してください。

  4. 前の手順で作成したカスタム WS-Policy ファイルを指定するように、Web サービスを実装する JWS ファイルで該当する @Policy アノテーションを更新します。たとえば、Web サービスのすべてのオペレーションの呼び出しで SAML を ID として使用する場合は、@Policy アノテーションをクラスレベルで指定します。
  5. Web サービスに関連付ける WS-Policy ファイルは、互いに矛盾しない限り、適宜組み合わせることができます。たとえば、SAML の ID としての使用を指定する <Identity> セキュリティ アサーションのみを含む、簡単な MyAuth.xml ファイルを作成し、あらかじめパッケージ化されている Encrypt.xml ファイルおよび Sign.xml ファイルとともにそのファイルを Web サービスに関連付けることができます。ただし、関連付けられた複数の WS-Policy ファイルが互いに矛盾しないように、管理者が確認する必要があります。何らかの矛盾がある場合は、実行時エラーが発生するか、または Web サービスが想定どおりに動作しなくなるおそれがあります。

  6. 通常の反復的な開発プロセスの一部として、Web サービスを再コンパイルして再デプロイします。
  7. Java から開始する WebLogic Web サービスの反復的な開発 : 主な手順」を参照してください。

  8. SAML を ID として使用してメイン Web サービスを呼び出すように、WebLogic Server インスタンスで実行されるクライアント アプリケーションを作成します。詳細については、「WebLogic Server インスタンスで実行中のクライアントからのメッセージ保護された Web サービスの呼び出し」を参照してください。

X.509 証明書トークンの ID としての使用

簡単なメッセージレベルのセキュリティのコンフィグレーション : 主な手順」で説明した、簡単な Web サービスのコンフィグレーション手順では、ユーザはユーザ名トークンを使用して自身を認証することが前提となっています。WebLogic Server は Web Services Security 仕様の Web Services Security: X.509 Certificate Token Profile を実装しているので、この節で説明するように、ユーザは Web サービスのオペレーションの呼び出し時に X.509 証明書を使用して自身を認証することもできます。

注意 : 次の手順では、「簡単なメッセージレベルのセキュリティのコンフィグレーション : 主な手順」での手順がすでに実行されていることを前提として、X.509 証明書を ID として使用できるようにします。

  1. まだ作成していない場合は、Administration Console を使用して、デフォルトの Web サービス セキュリティ コンフィグレーションを作成します。このコンフィグレーションの名前は default_wss にする必要があります。デフォルトの Web サービス セキュリティ コンフィグレーションは、別のコンフィグレーションを使用するように明示的にプログラミングされていない限り、ドメイン内のすべての Web サービスで使用されます。
  2. Web サービス セキュリティ コンフィグレーションの作成」を参照してください。

  3. ID として X.509 証明書を使用することを指定するように、前の手順で作成したデフォルトの Web サービス セキュリティ コンフィグレーションを更新します。「X.509 証明書を使用した ID の証明」を参照してください。
  4. 警告 : 上記の Administration Console の手順では、手順が 1 つ欠落しています。[デフォルト ユーザ名マッパーを使用] チェック ボックスがチェックされていることを確認した後で、特定の X.509 証明書属性をユーザにマップするように [デフォルト ユーザ名マッパーの属性の種類] フィールドも更新する必要があります。

  5. ID として X.509 証明書を使用することを指定するカスタム WS-Policy ファイルを作成します。
  6. 具体的には、<Identity><SupportedTokens> 要素の <SecurityToken> 子要素で TokenType 属性を、次の例に示すように #x509Token に設定します。

    <?xml version="1.0"?>
    <wsp:Policy
    xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
    xmlns:wssp="http://www.bea.com/wls90/security/policy"
    >
      <wssp:Identity>
          <wssp:SupportedTokens>
    <wssp:SecurityToken TokenType="#X509Token" />
    </wssp:SupportedTokens>
      </wssp:Identity>
    </wsp:Policy>

    独自の WS-Policy ファイルの作成に関する詳細については、「カスタム WS-Policy ファイルの作成と使用」を参照してください。

  7. 前の手順で作成したカスタム WS-Policy ファイルを指定するように、JWS ファイルで該当する @Policy アノテーションを更新します。たとえば、Web サービスのすべてのオペレーションの呼び出しで X.509 を ID として使用する場合は、@Policy アノテーションをクラスレベルで指定します。
  8. Web サービスに関連付ける WS-Policy ファイルは、互いに矛盾しない限り、適宜組み合わせることができます。たとえば、X.509 証明書の ID としての使用を指定する <Identity> セキュリティ アサーションのみを含む、簡単な MyAuth.xml ファイルを作成し、あらかじめパッケージ化されている Encrypt.xml ファイルおよび Sign.xml ファイルとともにそのファイルを Web サービスに関連付けることができます。ただし、関連付けられた複数の WS-Policy ファイルが互いに矛盾しないように、管理者が確認する必要があります。何らかの矛盾がある場合は、実行時エラーが発生します。

  9. 通常の反復的な開発プロセスの一部として、Web サービスを再コンパイルして再デプロイします。
  10. Java から開始する WebLogic Web サービスの反復的な開発 : 主な手順」を参照してください。

  11. X.509 を ID として使用する場合は、「メッセージ保護された Web サービスを呼び出すようにクライアント アプリケーションを更新する」で示されているものと同じクライアント アプリケーションを使用できます。唯一の更新は、X.509 を使用する場合は不要となるユーザ名トークンの作成を削除することです (省略可能)。削除するコードは、次のとおりです。
  12.     //クライアントサイドの UsernameToken 資格プロバイダ
    cp = new ClientUNTCredentialProvider(username, password);
    credProviders.add(cp);

プレーンテキストではなくパスワード ダイジェストの SOAP メッセージでの使用

デフォルトでは、WebLogic Web サービス セキュリティ ランタイムは、メッセージ保護された Web サービスを呼び出した結果として発生する SOAP メッセージの中で、パスワード ダイジェストではなくクリアテキスト パスワードを使用します。以下では、SOAP メッセージでパスワード ダイジェストが使用されるように、このデフォルトの動作を変更する手順について説明します。

次の手順では、「簡単なメッセージレベルのセキュリティのコンフィグレーション : 主な手順」での手順がすでに実行されていることを前提として、すべての SOAP メッセージでクリアテキスト パスワードではなくパスワード ダイジェストが使用されるように指定します。

  1. まだ作成していない場合は、Administration Console を使用して、デフォルトの Web サービス セキュリティ コンフィグレーションを作成します。このコンフィグレーションの名前は default_wss にする必要があります。デフォルトの Web サービス セキュリティ コンフィグレーションは、別のコンフィグレーションを使用するように明示的にプログラミングされていない限り、ドメイン内のすべての Web サービスで使用されます。
  2. 警告 : デフォルトの Web サービス セキュリティ コンフィグレーション (default_wss) に加えて、Web サービス セキュリティ コンフィグレーションを作成した場合は、各コンフィグレーションで同じパスワード ダイジェストの使用を指定する必要があります。使用するパスワード ダイジェストが Web サービス セキュリティ コンフィグレーション間で異なると、実行時エラーが発生します。

    Web サービス セキュリティ コンフィグレーションの作成」を参照してください。

  3. SOAP メッセージでパスワード ダイジェストを使用することを指定するように、前の手順で作成したデフォルトの Web サービス セキュリティ コンフィグレーションを更新します。「SOAP メッセージでのパスワード ダイジェストの使用」を参照してください。
  4. クリアテキスト パスワードではなく、ダイジェストを格納するように、WebLogic Server コア セキュリティのデフォルトの WebLogic 認証プロバイダを更新します。「認証および ID アサーション プロバイダのコンフィグレーション」を参照してください。
  5. あらかじめパッケージ化されている Auth.xml ファイルを使用する代わりにカスタム WS-Policy ファイルを作成して、<Identity><SupportedTokens><SecurityToken> 要素で明示的にユーザ名トークンを指定している場合は、次に示すように <Claims><UsePassword> 子要素を追加する必要があります。
  6. <wssp:Identity>
      <wssp:SupportedTokens>
       <wssp:SecurityToken TokenType="#UsernameToken">
    <wssp:Claims>
    <wssp:UsePassword
    Type="http://www.docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest" />
        </wssp:Claims>
    </wssp:SecurityToken>
      </wssp:SupportedTokens>
    </wssp:Identity>

    あらかじめパッケージ化されている Auth.xml ファイルを使用して認証をコンフィグレーションしている場合は、この手順を実行する必要はありません。

    独自の WS-Policy ファイルの作成に関する詳細については、「カスタム WS-Policy ファイルの作成と使用」を参照してください。

  7. カスタム WS-Policy ファイルを作成した場合は、そのファイルを指定するように、JWS ファイルで該当する @Policy アノテーションを更新します。「@Policy および @Policies アノテーションで JWS ファイルを更新する」を参照してください。
  8. 通常の反復的な開発プロセスの一部として、Web サービスを再コンパイルして再デプロイします。
  9. Java から開始する WebLogic Web サービスの反復的な開発 : 主な手順」を参照してください。

WebLogic Server インスタンスで実行中のクライアントからのメッセージ保護された Web サービスの呼び出し

簡単なメッセージレベルのセキュリティのコンフィグレーション : 主な手順」で説明した、簡単な Web サービスのコンフィグレーション手順では、スタンドアロンのクライアント アプリケーションがメッセージ保護された Web サービスを呼び出すことが前提となっています。ただし、クライアント自体が EJB、サーブレット、または別の Web サービスの一部として、WebLogic Server インスタンスで実行されている場合もあります。この場合には、WebLogic Server コア セキュリティ フレームワークを使用して資格プロバイダとトラスト マネージャをコンフィグレーションして、EJB、サーブレット、または JWS コードには保護されたオペレーションの簡単な呼び出しのみが含まれ、他のセキュリティ関連の API の使用は含まれないようにできます。以下では、この場合に WebLogic Server コア セキュリティ フレームワークを使用するための高度な手順について説明します。

  1. EJB、サーブレット、または JWS コードで、メッセージレベルのセキュリティがコンフィグレーションされていないものとして Web サービスのオペレーションを呼び出します。具体的には、ユーザ名トークンまたは X.509 トークンを格納する CredentialProvider オブジェクトを作成せず、さらに、セキュアな Web サービスのホストである WebLogic Server からの証明書を検証するための TrustManager コア セキュリティ API も使用しないようにします。クライアント コードでこれらの API を使用しない理由は、Web サービス ランタイムによってこの作業が実行されるためです。
  2. Administration Console を使用して、クライアント アプリケーションをホストする WebLogic Server インスタンスのコア セキュリティに必要な資格マッピング プロバイダをコンフィグレーションします。必要な資格マッピング プロバイダのリストは、呼び出す Web サービスに添付される WS-Policy ファイルによって異なります。通常は、ユーザ名/パスワードおよび X.509 証明書用の資格マッピング プロバイダをコンフィグレーションする必要があります。詳細については、「WebLogic 資格マッピング プロバイダのコンフィグレーション」を参照してください。
  3. 注意 : WebLogic Server には、ユーザ名/パスワードおよび X.509 用の資格マッピング プロバイダがありますが、デフォルトでコンフィグレーションされているのはユーザ名/パスワードのみです。

  4. Administration Console を使用して、前の手順でコンフィグレーションした資格マッピング プロバイダに実際の資格マッピングを作成します。サーバで実行されているクライアントに関連付けられたユーザ プリンシパルを、呼び出す Web サービスに対して有効な資格にマップする必要があります。詳細については、「WebLogic 資格マッピング プロバイダのコンフィグレーション」を参照してください。
  5. Administration Console を使用して、呼び出される Web サービスの X.509 証明書を信頼するように WebLogic Server コア セキュリティ フレームワークをコンフィグレーションします。詳細については、「資格検索および検証フレームワークのコンフィグレーション」を参照してください。

用意されている資格プロバイダとトラスト マネージャをクライアント アプリケーションで使用しない場合は、この手順で説明したように WebLogic Server コア セキュリティ フレームワークをコンフィグレーションする必要はありません。「メッセージ保護された Web サービスを呼び出すようにクライアント アプリケーションを更新する」で説明されているスタンドアロンの Java コードと同じ API を EJB、サーブレット、および JWS コードで使用することで、そのコンフィグレーションをすべてオーバーライドできます。ただし、コア セキュリティ フレームワークを使用することで、WebLogic Server のコンフィグレーションが標準化され、Web サービスを呼び出すクライアント アプリケーションの Java コードが簡略化されます。

Web サービスとデフォルト以外のセキュリティ コンフィグレーションとの関連付け

この章で説明されるセキュリティ使用例の多くでは、Administration Console を使用した、デフォルトの Web サービス セキュリティ コンフィグレーションの作成 (名前は default_wss) が必要になります。このコンフィグレーションの作成後は、@weblogic.jws.security.WssConfiguration JWS アノテーションを使用しなくても、属性のない状態でこのアノテーションを指定しても、すべての Web サービスにこのコンフィグレーションが適用されます。

ただし、指定するタイムスタンプ値をサービス間で変える場合など、Web サービスをデフォルト以外のセキュリティ コンフィグレーションに関連付けなければならない場合もあります。

Web サービスをデフォルト以外のセキュリティ コンフィグレーションに関連付けるには、次の手順に従います。

  1. default_wss 以外の名前が指定された Web サービス セキュリティ コンフィグレーションを作成します。
  2. JWS ファイルを更新します。@WssConfiguration アノテーションを追加して、このセキュリティ コンフィグレーションの名前を指定します。詳細と例については、「weblogic.jws.security.WssConfiguration」を参照してください。
  3. 通常の反復的な開発プロセスの一部として、Web サービスを再コンパイルして再デプロイします。
  4. Java から開始する WebLogic Web サービスの反復的な開発 : 主な手順」を参照してください。

警告 : すべての Web サービス セキュリティ コンフィグレーションで同じパスワード ダイジェストの使用を指定する必要があります。使用するパスワード ダイジェストが Web サービス セキュリティ コンフィグレーション間で異なると、実行時エラーが発生します。

 


転送レベルのセキュリティのコンフィグレーション

転送レベルのセキュリティとは、セキュア ソケット レイヤ (SSL) を使用したクライアント アプリケーションと Web サービスの間の接続の保護です。

SSL に関する一般的な情報と WebLogic Server に含まれている実装については、「Secure Sockets Layer (SSL)」を参照してください。

転送レベルの Web サービス セキュリティをコンフィグレーションするには、次の手順に従います。

  1. WebLogic Server コア セキュリティ サブシステムに対して SSL をコンフィグレーションします。
  2. 一方向の SSL (この節で説明されるデフォルト。WebLogic Server がクライアント アプリケーションに証明書を提示する必要がある)、または双方向の SSL (クライアント アプリケーションと WebLogic Server が両方とも互いに証明書を提示する必要がある) のいずれかをコンフィグレーションできます。

    WebLogic Server コア セキュリティ サブシステムに対して、一方向および双方向の SSL をコンフィグレーションする手順については、「SSL のコンフィグレーション」を参照してください。

  3. 必要に応じて、以下のメカニズムのいずれかを使用して、デフォルトで Web サービスを HTTPS を使用して呼び出せることを指定します。
  4. Web サービスを呼び出すクライアント アプリケーションを実行するときに、アプリケーションで使用する SSL 実装を示す特定のプロパティを指定します。具体的には、以下のとおりです。
  5. 双方向 SSL の詳細については、「クライアント アプリケーションでの双方向 SSL のコンフィグレーション」を参照してください。

クライアント アプリケーションでの双方向 SSL のコンフィグレーション

WebLogic Server で双方向 SSL をコンフィグレーションした場合は、一方向 SSL で必要なように WebLogic Server がクライアント アプリケーションに証明書を提示するだけでなく、クライアント アプリケーションも WebLogic Server に証明書を提示する必要があります。さらに、以下の要件も満たしている必要があります。

その他の Web サービス SSL の例

dev2dev CodeShare は、BEA の技術に関するアイデア、コード、およびベスト プラクティスを共有する、開発者向けのコミュニティです。このサイトでは、BEA のさまざまなの技術のコード例が紹介されており、Web サービスでの SSL の使い方に関するコード例もあります。

dev2dev サイトで SSL Web サービスのコード例の表示およびダウンロードを行うには、メインの「Projects」ページに移動し、[By Technology] カラムで [Web Services] リンクをクリックします。

 


アクセス制御セキュリティのコンフィグレーション : 主な手順

アクセス制御セキュリティとは、アクセスできるユーザを制御するように Web サービスをコンフィグレーションし、クライアントがオペレーションの 1 つを呼び出したときに Web サービスに対して HTTP またはユーザ名トークンを使用して自身を認証するようにクライアント アプリケーションをコーディングすることです。

WebLogic Web サービスはステートレス セッション EJB または Java クラスで実装されるため、標準的な J2EE の方法でこれらのコンポーネントを保護することで Web サービスを保護できます。「WebLogic リソースのセキュリティ」を参照してください。

Web サービスが EJB で実装されている場合は、JWS ファイルで以下の Web サービス固有の JWS アノテーションを使用することもできます。

これら 2 つのアノテーションを使用する場合に必要となる、EJB を明示的に実装する手順については、「ステートレス セッション EJB を実装すべき場合」を参照してください。

以下では、高度な手順について説明します。手順の詳細についてはこの章の後の節で説明します。

注意 : 次の手順では、WebLogic Web サービスを実装する JWS ファイルがすでに作成されていることを前提として、そのファイルをアクセス制御セキュリティの設定で更新します。また、Ant ビルド スクリプトを使用して Web サービスを反復的に開発することと、新しい情報で更新できる作業用の build.xml ファイルがあることも前提となっています。さらに、保護されていない Web サービスを呼び出すクライアント アプリケーションも用意されているものとします。これらの前提条件が満たされていない場合は、以下を参照してください。

  1. JWS ファイルを更新します。@SecurityRoles アノテーションまたは @SecurityIdentity アノテーションをクラス レベルまたはメソッド レベルで追加します。
  2. @SecurityRoles および @SecurityIdentity アノテーションでの JWS ファイルの更新」を参照してください。

  3. まだ確認していない場合は、JWS ファイルで EJB が明示的に実装されていることを確認します。手順については、「ステートレス セッション EJB を実装すべき場合」を参照してください。
  4. 必要に応じて、以下のメカニズムのいずれかを使用して、デフォルトで Web サービスを HTTPS を使用して呼び出せることを指定します。
  5. 通常の反復的な開発プロセスの一部として、Web サービスを再コンパイルして再デプロイします。
  6. Java から開始する WebLogic Web サービスの反復的な開発 : 主な手順」を参照してください。

  7. Administration Console を使用して、ロールおよびロールにマップするユーザを作成します。
  8. ユーザ、グループ、セキュリティ ロール」を参照してください。

  9. アクセス保護された WebLogic Web サービスの呼び出し時に、自身を認証するようにクライアント アプリケーションを更新します。
  10. この手順は、以下のようなさまざまな方法で実行できます。

@SecurityRoles および @SecurityIdentity アノテーションでの JWS ファイルの更新

Web サービスのオペレーションを呼び出すことができるロールを指定するには、JWS ファイルで WebLogic 固有の @weblogic.security.jws.SecurityRoles JWS アノテーションを使用します。呼び出される Web サービスが前提とする ID を指定するには、@weblogic.security.jws.SecurityIdentity アノテーションを使用します。

@SecurityRoles アノテーションは、クラス レベルでもメソッド レベルでも設定できます。クラスレベルで設定した場合、ロールはすべてのパブリック オペレーションに適用されます。このアノテーションをメソッド レベルで指定することで、特定のオペレーションにロールを追加できます。

@SecurityRoles アノテーションには、以下の 2 つの属性があります。

@SecurityIdentity アノテーションは、クラスレベルでのみ設定できます。属性は、呼び出される Web サービスが前提とするロールを指定する value だけです。ロールは、WebLogic Server のセキュリティ レルム内のユーザまたはグループに対応している必要があります。

次の例では、JWS ファイルでの @SecurityRoles アノテーションおよび @SecurityIdentity アノテーションの使い方を示します。該当する個所は太字で表示しています。

package examples.webservices.security_roles;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import weblogic.ejbgen.Session;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import weblogic.jws.WLHttpTransport;
import weblogic.jws.security.SecurityRoles;
import weblogic.jws.security.SecurityIdentity;
@Session(ejbName="SecurityRolesEJB")
@WebService(name="SecurityRolesPortType",
serviceName="SecurityRolesService",
targetNamespace="http://example.org")
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,
use=SOAPBinding.Use.LITERAL,
parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
@WLHttpTransport(contextPath="security", serviceUri="SecurityRolesService",
portName="SecurityRolesPort")
// Web サービス全体を呼び出すことができるロールを指定する
@SecurityRoles(rolesAllowed="Admin")
@SecurityIdentity( value="Admin")
/**
* この JWS ファイルは、1 つのオペレーション sayHello を含む簡単な
 * Java クラス実装の WebLogic Web サービスの基本となる
 *
*/
public class SecurityRolesImpl implements SessionBean {
  @WebMethod()
public String sayHello(String message) {
System.out.println("sayHello:" + message);
return "Here is the message: '" + message + "'";
}
// 標準の EJB メソッド。通常、メソッドをオーバーライドする必要はない
  public void ejbCreate() {}
public void ejbActivate() {}
public void ejbRemove() {}
public void ejbPassivate() {}
public void setSessionContext(SessionContext sc) {}
}

JAX-RPC プロパティを使用して自身を認証するためのクライアント アプリケーションの更新

Web サービスを呼び出す JAX-RPC クライアント アプリケーションを記述する場合、クライアントが自身を認証できるように、以下の 2 つのプロパティを使用してサービスにユーザ名とパスワードを送信します。

次の例は JAX-RPC 仕様からの抜粋ですが、javax.xml.rpc.Stub インタフェースを使用してセキュアな Web サービスを呼び出す場合の、これらのプロパティの使い方を示しています。

StockQuoteProviderStub sqp = // ... スタブを取得する
sqp._setProperty ("javax.xml.rpc.security.auth.username", "juliet");
sqp._setProperty ("javax.xml.rpc.security.auth.password", "mypassword");
float quote sqp.getLastTradePrice("BEAS");

JAX-RPC を使用してセキュアな Web サービスを呼び出すクライアント アプリケーションの記述に関する詳細については、http://java.sun.com/xml/jaxrpc/index.html を参照してください。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次