暗号化 SOAP ヘッダー
暗号化ヘッダー・エレメントは SOAP ヘッダーを暗号化するための標準的な方法を提供します。 OASIS SOAP メッセージ・セキュリティー仕様の拡張機能の 1 つとして、暗号化ヘッダー・エレメントは、応答側が要求を処理したことを示します。 SOAP ヘッダーおよび各部分を暗号化することで、よりセキュアなメッセージ・レベルのセキュリティーを提供できます。
EncryptedHeader すなわち <wsse11:EncryptedHeader> エレメントは、更新された Web Services Security バージョン 1.1 標準の一部であり、Microsoft .NET や DataPower® など、バージョン 1.1 標準をサポートする他のベンダーとのインターオペラビリティーを使用可能にします。
SOAP ヘッダー・ブロックを暗号化するために EncryptedHeader エレメントを使用します。EncryptedHeader エレメントにより、Web Services Security は SOAP mustUnderstand 処理ガイドラインに準拠し、SOAP ヘッダー・ブロックの属性に含まれる情報の開示を防ぐことができます。
<wsse11:EncryptedHeader> エレメントには、1 つの <xenc:EncryptedData> エレメントが含まれている必要があります。 1 つの暗号化ヘッダー・エレメントに対して許可される <xenc:EncryptedData> エレメントは 1 つだけです。
暗号化データ・エレメント
通常、JAX-WS などのプログラミング・モデルは、呼び出しをアプリケーション・コードにディスパッチする前に SOAP メッセージを Java™ バインディング・オブジェクトにデシリアライズします。ただし、SOAP メッセージが暗号化されていると、デシリアライゼーションは失敗します。これは、暗号化の前に、オリジナルの内容が XML 暗号化標準の EncryptedData XML エレメントに置き換えられるからです。
<wsse:Security> ヘッダーに含まれているトークンが、受信側の処理ロールのために暗号化されているほうが望ましい場合もあります。
- EncryptedHeader エレメントには 1 つの EncryptedData エレメントが含まれている必要があります。
- <xenc:EncryptedData> エレメントは、セキュリティー・トークンを含め、それを <wsse:Security> ヘッダーに含めるために使用できます。
- 含まれているセキュリティー・トークンを参照するために、<xenc:EncryptedData> に XML ID が含まれていてはいけません。
- すべての <xenc:EncryptedData> トークンは、埋め込まれた暗号鍵を持っているか、または別の暗号鍵により参照される必要があります。
- Basic Security Profile 1.1 への準拠が望ましい場合、<xenc:EncryptedData> エレメントに Id 属性を含める必要があります。
暗号化パーツのポリシー・アサーション
EncryptedParts ポリシー・アサーションは、セキュリティー・ポリシーでどのヘッダーが暗号化されるかを指定します。次のテーブルで、EncryptedParts に使用できるエレメントおよび属性を説明します。
エレメントまたは属性 | 説明 |
---|---|
/sp:EncryptedParts/sp:Header | オプション。このオプション・エレメントがあることは、特定の SOAP ヘッダー (またはヘッダー・セット) が保護される必要があることを示します。単一の EncryptedParts エレメント内に複数の sp:Header エレメントを持つことができます。 各ヘッダー (またはヘッダー・セット) は暗号化される必要があり、この暗号化は Web Services Security バージョン 1.1 で暗号化されたヘッダーを使用してエレメントを暗号化します。 そのため、WS-Secuirty 1.1 で暗号化されたヘッダーがサービスによってサポートされていない場合は、そのヘッダーはメッセージ・レベルのセキュリティーを使用して暗号化することができません。 同じローカル名を持つが、異なる名前空間を持つ複数の SOAP ヘッダーが暗号化される場合は、単一の sp:EncryptedParts アサーションの一部として、または個別の sp:EncryptedParts アサーションとして、複数の sp:Header エレメントが必要です。 |
/sp:EncryptedParts/sp:Header/@Name | オプション。この属性は、機密性を保護する SOAP ヘッダーのローカル名を示します。 この属性が指定されていない場合、名前空間が Namespace 属性に一致するすべての SOAP ヘッダーが保護されます。 |
/sp:EncryptedParts/sp:Header/@Namespace | 必須この属性は、機密性を保護する SOAP ヘッダーの名前空間を示します。 |
次のメッセージ例は、暗号化されるヘッダーの EncryptedParts ポリシー・アサーションがポリシーに指定された場合に、EncryptedHeader エレメントがメッセージ上でどのようになるかを示しています。
<S:Envelope xmlns:S="…" xmlns:wsse="…" xmlns:wsse11="…" xmlns:wsu="…"
xmlns:xenc="…" xmlns:ds="…">
<S:Header>
<wsse:Security>
<!-- Tokens etc. -->
<xenc:EncryptedKey>
<xenc:EncryptionMethod Algorithm="…"/>
<ds:KeyInfo>
… …
</ds:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>…</xenc:CipherValue>
</xenc:CipherData>
<xenc:ReferenceList>
<xenc:DataReference URI="#hdrID"/>
</xenc:ReferenceList>
</xenc:EncryptedKey>
</wsse:Security>
<wsse11:EncryptedHeader wsu:Id="hdrID">
<xenc:EncryptedData Id="encDataID">
<xenc:CipherData>
<xenc:CipherValue>…</xenc:CipherValue>
</xenc:CipherData>
…
</xenc:EncryptedData>
</wsse11:EncryptedHeader>
</S:Header>
<S:Body>
…
</S:Body>
</S:Envelope>
Web Services Security バージョン 1.0 仕様のフォーマットでヘッダーを暗号化するには、バインディングの <encryptionInfo> エレメントで、com.ibm.wsspi.wssecurity.encryptedHeader.generate.WSS1.0 プロパティーに true の値を指定します。 このプロパティーを指定した場合、暗号化のターゲットであるヘッダーは、<EncryptedData> エレメントを含む <EncryptedHeader> エレメントの代わりに、<EncryptedData> エレメントによって置き換えられます。
Web Services Security バージョン 1.1 の振る舞いが WebSphere® Application Server のバージョン 7.0 よりも前のバージョンと同じ場合は、バインディングの <encryptionInfo> エレメントの値として true を持つ com.ibm.wsspi.wssecurity.encryptedHeader.generate.WSS1.1.pre.V7 プロパティーを指定します。 このプロパティーを指定した場合、<EncryptedHeader> エレメントには、wsu:Id パラメーターが含まれ、<EncryptedData> エレメントでは Id パラメーターが省略されます。このプロパティーは、Basic Security Profile 1.1 への準拠が必要でない場合にのみ使用してください。
EncryptedHeader エレメントと EncryptedData エレメントの完全な情報については、Web Services Security バージョン 1.1 仕様を参照してください。