BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA
 ドキュメントのダウンロード   サイト マップ   用語集 
検索

B2B Integration セキュリティの実装

 前 次 目次 索引 PDF で表示  

否認防止性の実装

ここでは、以下の内容を取り上げます。

 


否認防止性の概要

否認防止性とは、トレーディング パートナが別のトレーディング パートナ宛てのビジネス メッセージを送信したこと証明したり、トレーディング パートナからのビジネス メッセージを受信したことを証明できることを表します。例を挙げて説明します。

トレーディング パートナ A は、トレーディング パートナ B から 1000 脚のエルゴノミクス チェアを購入することに同意しました。そこでトレーディング パートナ A は、チェアを定価で購入することに同意するビジネス メッセージをトレーディング パートナ B に送信しました。しかし後になって、トレーディング パートナ A は元の価格に異議を唱え、その価格を支払うことに同意することを伝えたメッセージを送信したことを否定します。

信頼性の高い否認防止システムが用意されていれば、トレーディング パートナ B は、トレーディング パートナ A が支払うことに同意した金額を明記したトレーディング パートナ A からのドキュメントを示すことで、トレーディング パートナ A の主張を退けることができます。さらに、この元のドキュメントが、信頼性のあるサードパーティ ソースによってデジタル署名され、タイムスタンプを付けられ、記録されていれば、このドキュメントは法的に完全な有効性を持ちます。

否認防止性、つまり否認を主張する当事者の関与を示す法的証拠を提示する能力は、重要なビジネス メッセージには不可欠です。WebLogic Integration B2B は、送信側の否認防止性と受信側の否認防止性の両方をサポートしています。

否認防止性をサポートするため、B2B engineには以下のサービスが組み込まれています。

ここからは、それぞれのサービスと、B2B 環境にこれらのサービスを組み込む方法について説明します。

デジタル署名サポート

デジタル署名サポートの目的は、特に 2 つのトレーディング パートナ間を転送しているときに、ビジネス メッセージの内容が改ざんされることを防ぐ手段を提供することです。B2B engineは、デジタル署名の Public Key Cryptography Standard 7 (PKCS7) パッケージングに準拠したデジタル署名サポートを提供します。

デジタル署名自体は、ビジネス メッセージに追加されるデータのセットです。データの内容は、特定のフォーマット(PKCS7 SignedData など)でパッケージ化されたデータを暗号化した一方向のハッシュ値です。デジタル署名の目的は以下のとおりです。

デジタル署名の作成に必要なデータは、リポジトリ内のトレーディング パートナのコンフィグレーション データから取り出されます。デジタル署名の作成には、以下の情報も必要となります。

デジタル署名サポートで使用可能なビジネス プロトコル

WebLogic Integration は、以下のビジネス プロトコルを使用するメッセージに対してデジタル署名サポートを提供します。

デジタル署名サポートのコンフィグレーション

WebLogic Integration をコンフィグレーションする場合、デジタル署名サービスを指定するオプションを選択できます。デジタル署名サービスを使用するには、否認防止のためのデジタル署名のコンフィグレーションで説明されているようにコンフィグレーションする必要があります。

セキュア タイムスタンプ サービス

否認防止性を使用する場合、ビジネス メッセージがセキュア監査ログに書き込まれるときに、セキュア タイムスタンプ サービスがセキュア監査ログに UTC (Coordinated Universal Time: 協定世界時) タイムスタンプを付ける必要があります。たとえば、ビジネス メッセージを受け取った場合、タイムスタンプは受信側の否認防止性(NRR)メッセージとして監査ログに入力されます。ビジネス メッセージを送信した場合、タイムスタンプは送信側の否認防止性(NRO)メッセージとして監査ログに入力されます。WebLogic Integration B2B には SPI (Service Provider Interface: サービス プロバイダ インタフェース) が含まれているので、信頼性のあるサードパーティ プロバイダのセキュア タイムスタンプ サービスを組み込むことができます。

信頼性のあるサードパーティ プロバイダのセキュア タイムスタンプ サービスを組み込む場合、com.bea.b2b.security.TimestampProvider インタフェースを実装する Java クラス ファイルを作成する必要があります。com.bea.b2b.security.TimestampProvider インタフェースを実装するクラスのクラス メソッド(getTimestamp など)で、サードパーティのタイムスタンプ プロバイダを呼び出します。このアプリケーションの作成の詳細については、セキュア タイムスタンプ サービス用の SPI の使い方を参照してください。

B2B engineでは、複数のセキュア タイムスタンプ プロバイダを WebLogic Integration に登録することは禁止されています。この制限により、WebLogic Integration で作成されるすべてのタイムスタンプは必ず日付順に並べられます。

注意: セキュア タイムスタンプ サービスを WebLogic Integration でコンフィグレーションしない場合、システム イベントおよび署名にはシステム時刻に基づいてタイムスタンプが付けられます。

セキュア タイムスタンプ SPI の詳細については、セキュア タイムスタンプ サービス用の SPI の使い方を参照してください。

セキュア タイムスタンプ サービスのコンフィグレーション

セキュア タイムスタンプ サービスをコンフィグレーションするには、以下の手順を実行します。

  1. WebLogic Integration B2B エンジンのセキュリティのコンフィグレーションで説明しているように、WebLogic Integration B2B Console を起動し、B2B コンフィグレーション ページを表示します。

  2. [セキュリティ] タブを選択します。次の図に示す B2B の [セキュリティ] コンフィグレーション ページが表示されます。

    図5-1 B2B の [セキュリティ] コンフィグレーション ページ


     

  3. [セキュア タイムスタンプ クラス] フィールドに、セキュア タイムスタンプ インタフェースを実装する Java クラスの完全修飾名を入力します。

  4. 新しいコンフィグレーションを有効にするため WebLogic Server を再起動します。

セキュア監査ログ サービス

セキュア監査ログも否認防止に欠かせません。通常、このログには、各ビジネス メッセージをデジタル署名およびセキュア タイムスタンプと一緒に格納します。監査ログを使用すると、トレーディング パートナ間でビジネス メッセージを交換しているときに発生したシステム イベントとメッセージのタスク順序を再現できます。

タイムスタンプ サービスと同じように、B2B engineが提供する SPI を使用して、セキュア監査ログの信頼性のあるサードパーティ プロバイダをコンフィグレーションすることができます。信頼性のあるサードパーティ プロバイダのセキュア監査ログ サービスを組み込む場合、com.bea.b2b.security.AuditLogProvider インタフェースを実装するクラス ファイルを作成する必要があります。com.bea.b2b.security.AuditLogProvider インタフェースを実装するクラスのクラス メソッド(log など)で、サードパーティの監査ログ プロバイダを呼び出します。この実装の作成の詳細については、セキュア監査ログ サービス用の SPI の使い方を参照してください。

注意: セキュア監査ログ サービスのサードパーティ プロバイダをコンフィグレーションしない場合、B2B システムでは、secureaudit.log というデフォルトの監査ログが提供されます。このログを有効にするには、システム プロパティ bea.secureauditon に設定します。このファイルは、B2B 内のロギング サブシステムに基づいており、基盤となるオペレーティング システムのファイル パーミッション システムによってしか保護されません。このファイルは、デジタル署名されたり、暗号化されたりしません。

監査ログへの書き込み

監査ログに書き込むアプリケーションを呼び出す com.bea.b2b.security.AuditLogProvider インタフェースの Java 実装を作成する代わりに、この節のコード リストで示すように、com.bea.b2b.security.Audit.log(byte[] data) メソッドの呼び出しを使用して監査ログに直接書き込むアプリケーションを作成することもできます。

この例は、次のディレクトリにある HelloPartnerServlet.java クラスを変更したものです。SAMPLES_HOME は、サンプル アプリケーションがインストールされているディレクトリを表しています。

%SAMPLES_HOME%¥integration¥samples¥HelloPartner¥src¥wlcsamples¥servlets
$SAMPLES_HOME/integration/samples/HelloPartner/src/wlcsamples/servlets

この例では、太字のコードは監査ログに書き込むことを示すために追加された文を示しています。

コード リスト 5-1 監査ログへの書き込み例

package wlcsamples.servlets;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.lang.*;
import javax.transaction.*;
import javax.naming.*;
import javax.jms.*;
import weblogic.jms.extensions.WLTopicSession;
import weblogic.jms.extensions.XMLMessage;
import org.w3c.dom.*;
import org.apache.html.dom.*;
import org.apache.xml.serialize.*;
import org.apache.xerces.dom.*;
import org.apache.xerces.parsers.DOMParser;
import org.xml.sax.*;
import com.bea.eci.logging.*;

//セキュリティ パッケージから Audit クラスをインポートする
import com.bea.b2b.security.Audit;
...
protected void printResultHTML(PrintWriter pw, Document resultDoc)
{
try {
pw.println("<P><CENTER><P><BR> <b>Hello Partner Sample</b><BR>");
if( resultDoc != null ) {
Element root = resultDoc.getDocumentElement();
NodeList productList =
root.getElementsByTagName("integer-product");
NodeList noteList =
root.getElementsByTagName("note");
Node childProduct = productList.item(0);
Node childNote = noteList.item(0);
if( childProduct == null || childNote == null ) {
pw.println("<BR> The Replier Partner has responded
with a document of unexpected structure...");
else {
String product = ((Text)childProduct.
getFirstChild()).getData();
String note = ((Text)childNote.getFirstChild()).
getData();
// 注(note)を Audit ログに記録する
byte[] ba = note.getBytes();
Audit.log(ba);
//String strXMLDoc = DocSerializer.docToString
(resultDoc);
pw.println("<BR> The Replier Partner has responded
with the following result... <BR> ");
pw.println("<BR> Product: " + product + "");
pw.println("<BR> Note: " + note + "<P><BR><BR>
</CENTER>");
pw.println("<CENTER><IMG SRC=¥"Hello4.gif¥"
WIDTH=650 HEIGHT=220
BORDER=0 NATURALSIZEFLAG=3></CENTER>");
}
}
else {
pw.println("<BR> ERROR: ");
pw.println("<BR> The Requestor Trading Partner's private
workflow did not return a result.<P><BR><BR></CENTER>");
pw.println("<CENTER><IMG SRC=¥"Hello1.gif¥" WIDTH=650
HEIGHT=220 BORDER=0 NATURALSIZEFLAG=3></CENTER>");
}
pw.println("<P><CENTER><BR> <BR> ");
pw.println("<P><CENTER><A HREF=¥"/HelloPartnerLauncher.html¥">
<b>Click Here to Run Again</b></A></CENTER></P>");
} catch (Exception e) {
e.printStackTrace();
}
}

セキュア監査ログのコンフィグレーション

セキュア監査ログをコンフィグレーションするには、以下の手順を実行します。

  1. WebLogic Integration B2B エンジンのセキュリティのコンフィグレーションで説明しているように、B2B Console を起動し、WebLogic Integration B2B コンフィグレーション ページを表示します。

  2. [セキュリティ] タブを選択します。次の図に示す B2B の [セキュリティ] コンフィグレーション ページが表示されます。

    図5-2 WebLogic Integration B2B の [セキュリティ] コンフィグレーション ページ


     

  3. [監査ログ クラス] フィールドに、セキュア監査ログを実装する Java クラスの完全修飾名を入力します。

  4. 新しいコンフィグレーションを有効にするため WebLogic Server を再起動します。

 


否認防止用の SPI の使い方

この節では、以下の否認防止サービス用の SPI について説明します。

セキュア タイムスタンプ サービス用の SPI の使い方

WebLogic Integration B2B では、com.bea.security.TimeStampProvider インタフェースを実装することで、セキュア タイムスタンプ サービスをカスタマイズできます。ここで説明する SPI を使用してタイムスタンプ サービスを実装する場合、そのサービスが実行時に正しく呼び出されるように、B2B Console でサービスをコンフィグレーションする必要があります。

com.bea.b2b.security.TimeStampProvider インタフェースには、タイムスタンプ アプリケーションが実装しなければならない以下のメソッドがあります。

タイムスタンプ インタフェースの実装には、引数を持たないデフォルトのパブリック コンストラクタを含める必要があります。TimeStampProvider を実装するクラス内のコンストラクタもメソッドも、例外を送出してはなりません。

セキュア監査ログ サービス用の SPI の使い方

WebLogic Integration B2B では、com.bea.security.AuditLogProvider インタフェースを実装することで、セキュア監査ログ サービスを作成できます。ここで説明する SPI を使用して監査ログ サービスを実装する場合、そのサービスが実行時に正しく呼び出されるように、B2B Console でサービスをコンフィグレーションする必要があります。

com.bea.b2b.security.AuditLogProvider インタフェースには、監査ログ アプリケーションが実装しなければならない以下のメソッドがあります。

セキュア監査インタフェースの実装には、引数を持たないデフォルトのパブリック コンストラクタを含める必要があります。AuditLogProvider を実装するクラス内のコンストラクタもメソッドも、例外を送出してはなりません。

監査ログ メッセージ

すべてのログ メッセージは、各メッセージ タイプの内容を定義する DTD log-message.dtd に対応しています。

すべての監査ログ メッセージは、以下の 3 つの識別子を持ちます。

次の表では、各メッセージ タイプのデータの内容について説明します。すべてのログ メッセージには、WebLogic Integration でコンフィグレーションされているタイムスタンプ プロバイダから取得したタイムスタンプが格納されています。

メッセージ タイプ

説明

NRR

受信側の否認防止性。ビジネス メッセージとアプリケーション データを受け取るトレーディング パートナの名前を格納する。

NRO

送信側の否認防止性。送信側トレーディング パートナの名前、ビジネス メッセージ、およびアプリケーション データを格納する。

APP

Audit.log(byte[] data) メソッドを使用してトレーディング パートナの Java クラスからログに記録される。このメッセージ タイプのデータ フォーマットは、文字列化した XML ドキュメントである。アプリケーションはメッセージをログに記録するので、データの内容はアプリケーション自体が管理する。


 

監査ログの DTD

次のコード例は、log-message.dtd ファイルを示しています。

<!ELEMENT LOG (non-repudiation-origin| non-repudiation-receipt | application)>
<!ATTLIST LOG time-stamp CDATA #REQUIRED >
<!ATTLIST LOG location CDATA #IMPLIED >
<!ATTLIST LOG Principal CDATA #IMPLIED >
<!ELEMENT non-repudiation-origin (#PCDATA)>
<!ELEMENT non-repudiation-receipt (#PCDATA)>
<!ELEMENT application (#PCDATA)>

 

ページの先頭 前 次