暗号化方式

要求生成プログラム・バインディングの設定では、暗号化方式に SOAP メッセージの暗号化で使用するデータ暗号化アルゴリズムおよび鍵暗号化アルゴリズムの指定が含まれます。 暗号化用 WSS API (WSSEncryption) は、アルゴリズム名、およびデータ暗号化方式と鍵暗号化方式のマッチング・アルゴリズム URI (Uniform Resource Identifier) を指定します。 データ暗号化アルゴリズムと鍵暗号化アルゴリズムを指定すると、それらのアルゴリズムで暗号化されたエレメントのみが受け入れられます。

データ暗号化アルゴリズム

データ暗号化アルゴリズムは、本文とシグニチャーを含む SOAP メッセージの各部を暗号化するために使用します。 データ暗号化解除アルゴリズムは、各データ暗号化アルゴリズム・タイプのアルゴリズム URI (Uniform Resource Identifier) を指定します。

以下の事前構成済みデータ暗号化アルゴリズムがサポートされています。
表 1. データ暗号化アルゴリズムこれらのアルゴリズムが SOAP メッセージの暗号化に使用されます。
データ暗号化アルゴリズム名 アルゴリズム URI
WSSEncryption.AES128 (デフォルト値) データ暗号化アルゴリズム AES 128 の URI: http://www.w3.org/2001/04/xmlenc#aes128-cbc
WSSEncryption.AES192 データ暗号化アルゴリズム AES 192 の URI: http://www.w3.org/2001/04/xmlenc#aes192-cbc
WSSEncryption.AES256 データ暗号化アルゴリズム AES 256 の URI: http://www.w3.org/2001/04/xmlenc#aes256-cbc
WSSEncryption.TRIPLE_DES データ暗号化アルゴリズム TRIPLE DES の URI: http://www.w3.org/2001/04/xmlenc#tripledes-cbc

デフォルトでは、Java™ Cryptography Extension (JCE) は、暗号の強度が制限または限定された状態で出荷されます。 192 ビットおよび 256 ビットの Advanced Encryption Standard (AES) 暗号化アルゴリズムを使用するには、 無制限の管轄権ポリシー・ファイルを適用する必要があります。

重要: 出身国によっては、暗号化ソフトウェアの他の国への輸入、所持、使用、または再輸出が制限されている場合があります。 制限なしのポリシー・ファイルをダウンロードまたは使用する前に、暗号化ソフトウェアに関して、その輸入、所有、使用、他国への再輸出に関するお客様の国の法規および方針を確認して、その行為が許可されているかどうかを判断する必要があります。

AES256-cbc および AES192-CBC アルゴリズムの場合、Web サイト http://www.ibm.com/developerworks/java/jdk/security/index.htmlから非制限 Java™ Cryptography Extension (JCE) ポリシー・ファイルをダウンロードする必要があります。

ジェネレーター側の暗号化用に構成されたデータ暗号化アルゴリズムは、コンシューマー側の暗号化解除用に構成されたデータ暗号化アルゴリズムと一致している必要があります。

鍵暗号化アルゴリズム

このアルゴリズムは、鍵の暗号化と暗号化解除に使用されます。 この鍵情報は、デジタル署名および暗号化用の鍵の生成に必要な構成を指定する際に使用します。 署名情報の構成と暗号化情報の構成で、鍵情報を共有することができます。 コンシューマー側の鍵情報は、 受信メッセージにおけるデジタル署名の検証、または 暗号化されたメッセージ・パーツの暗号化解除に使用する鍵の情報を指定するために使用します。 要求生成プログラムは、クライアント用に構成されます。

注: ポリシー・セットは、対称鍵暗号化をサポートしません。 WSS API を対称鍵の暗号化で使用する場合、ポリシー・セットを使用している Web サービスのエンドポイントとの間では操作が行えません。

鍵暗号化アルゴリズムは、鍵暗号化方式のアルゴリズム URI (Uniform Resource Identifier) を指定します。 次の事前構成済み鍵暗号化アルゴリズムがサポートされています。

表 2. サポートされる事前構成済みの鍵暗号化アルゴリズムこれらのアルゴリズムが鍵の暗号化と暗号化解除に使用されます。
WSS API URI
WSSEncryption.KW_AES128 鍵暗号化アルゴリズム、鍵ラップ AES 128 の URI: http://www.w3.org/2001/04/xmlenc#kw-aes128
WSSEncryption.KW_AES192 鍵暗号化アルゴリズム、鍵ラップ AES 192 の URI: http://www.w3.org/2001/04/xmlenc#kw-aes192
制約事項: 構成したアプリケーションを基本セキュリティー・プロファイル (BSP) に準拠させる場合は、192 ビットの鍵暗号化アルゴリズムを使用しないでください。
WSSEncryption.KW_AES256 鍵暗号化アルゴリズム、鍵ラップ AES 256 の URI: http://www.w3.org/2001/04/xmlenc#kw-aes256
WSSEncryption.KW_RSA_OAEP (デフォルト値) 鍵暗号化アルゴリズム、鍵ラップ RSA OAEP の URI: http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p
WSSEncryption.KW_RSA15 鍵暗号化アルゴリズム、鍵ラップ RSA 1.5 の URI: http://www.w3.org/2001/04/xmlenc#rsa-1_5
WSSEncryption.KW_TRIPLE_DES 鍵暗号化アルゴリズムの URI、キー・ラップ TRIPLE DES の場合: http://www.w3.org/2001/04/xmlenc#kw-tripledes
鍵に関連する以下のような追加情報を指定して、会話をセキュアにする必要があります。
  • algorithmName
  • keyLength
デフォルトでは、RSA-OAEP アルゴリズムは、SHA1 メッセージ・ダイジェスト・アルゴリズムを使用して、暗号化操作の一部としてメッセージ・ダイジェストを計算します。 オプションで、鍵暗号化アルゴリズム・プロパティーを指定することにより、SHA256 または SHA512 メッセージ・ダイジェスト・アルゴリズムを使用できます。 プロパティー名は com.ibm.wsspi.wssecurity.enc.rsaoaep.DigestMethod です。 プロパティー値は、以下のダイジェスト方式の URI のいずれかです。
  • http://www.w3.org/2001/04/xmlenc#sha256
  • http://www.w3.org/2001/04/xmlenc#sha512

デフォルトで RSA-OAEP アルゴリズムは、OAEPParams 用のオプショナル・エンコードのオクテット・ストリングに対してヌル・ストリングを使用します。 鍵暗号化アルゴリズム・プロパティーを指定することにより、明示的エンコードのオクテット・ストリングを提供できます。 プロパティー名として、com.ibm.wsspi.wssecurity.enc.rsaoaep.OAEPparams を指定できます。 プロパティー値は、オクテット・ストリングを Base 64 でエンコードした値です。

重要: これらのダイジェスト方式および OAEPParams プロパティーは、ジェネレーター側でのみ設定できます。 コンシューマー側では、着信 SOAP メッセージからこれらのプロパティーが読み取られます。

KW-AES256 および KW-AES192 鍵暗号化アルゴリズムの場合、Web サイト http://www.ibm.com/developerworks/java/jdk/security/index.htmlから非制限 JCE ポリシー・ファイルをダウンロードする必要があります。

生成プログラム用の鍵暗号化アルゴリズムは、 コンシューマー用に構成された鍵暗号化解除アルゴリズムと一致していなければなりません。

以下は、データ暗号化方式で Triple-DES を使用し、鍵暗号化方式で RSA1.5 を使用する暗号化のサンプル・コードの例です。

	  // get the message context
	  Object msgcontext = getMessageContext();

	  // generate WSSFactory instance
	  WSSFactory factory = WSSFactory.getInstance();		

	  // generate WSSGenerationContext instance
	  WSSGenerationContext gencont = factory.newWSSGenerationContext();

	  // generate callback handler
	  X509GenerateCallbackHandler callbackHandler = new X509GenerateCallbackHandler(
			  "",
			  "enc-sender.jceks",
			  "jceks", 
			  "storepass".toCharArray(), 
			  "bob", 
			  null, 
			  "CN=Bob, O=IBM, C=US", 
			  null);

	  // generate the security token used to the encryption
	  SecurityToken token = factory.newSecurityToken(X509Token.class, 
        callbackHandler);

	  // generate WSSEncryption instance to encrypt the SOAP body content
	  WSSEncryption enc = factory.newWSSEncryption(token);
	  enc.addEncryptPart(WSSEncryption.BODY_CONTENT);

	  // set the data encryption method
	  // DEFAULT: WSSEncryption.AES128
	  enc.setEncryptionMethod(WSSEncryption.TRIPLE_DES);

	  // set the key encryption method
	  // DEFAULT: WSSEncryption.KW_RSA_OAEP
	  enc.setEncryptionMethod(WSSEncryption.KW_RSA15);

	  // add the WSSEncryption to the WSSGenerationContext
	  gencont.add(enc);

	  // generate the WS-Security header
	  gencont.process(msgcontext);