Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

セキュリティ要素の詳細

この付録では、SOAP メッセージの一般的なセキュリティ要素、特に Caché Web サービスおよび Web クライアントで送信可能なバリエーションについて説明します。この情報は、継続して SOAP の作業に携わっていない人が覚えている知識を確認するためのものです。ここで提供する詳細は、トラブルシューティングにも役立ちます。

この付録では、以下の項目について説明します。

<BinarySecurityToken>

<BinarySecurityToken> の目的は、メッセージ受信者が使用するために、メッセージの他の要素で使用されるセキュリティ資格情報を保持することです。セキュリティ資格情報は、シリアル化されたエンコード形式で保持されます。以下は、部分的な例です。

<BinarySecurityToken wsu:Id="SecurityToken-4EC1997A-AD6B-48E3-9E91-8D50C8EA3B53" 
                     EncodingType="[parts omitted]#Base64Binary" 
                     ValueType="[parts omitted]#X509v3">
             MIICnDCCAYQ[parts omitted]ngHKNhh
</BinarySecurityToken>

詳細

この要素の各部分は以下のとおりです。

  • Id は、このトークンの一意の識別子で、このメッセージの他の要素がこのトークンを参照できるように組み込まれます。Caché は、必要に応じて、これを自動的に生成します。

  • EncodingType は、<BinarySecurityToken> の値を生成するために使用されたエンコードのタイプを示します。Caché では、<BinarySecurityToken> で使用されるエンコードは、Base 64 のエンコードのみです。

  • ValueType は、トークンに含まれている値のタイプを示します。Caché では、サポートされている値のタイプは、X.509 証明書のみです。

  • <BinarySecurityToken> 要素内に含まれる値は、シリアル化されたエンコード証明書です。この例では、値 MIICnDCCAYQ[parts omitted]ngHKNhh がセキュリティ資格情報です。

このトークンが暗号化アクションに関連付けられている場合、含まれる証明書はメッセージ受信者の証明書です。このトークンが署名に関連付けられている場合、含まれる証明書はメッセージ送信者の証明書です。

メッセージ内での位置

<BinarySecurityToken> は、<Security> 内で、この要素を参照する他の要素よりも前に組み込まれる必要があります。

<EncryptedKey>

<EncryptedKey> の目的は、メッセージの他の要素によって使用される対称鍵を保持することです。対称鍵は、暗号化された形式で保持されます。以下は、部分的な例です。

<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
   <EncryptionMethod Algorithm="[parts omitted]xmlenc#rsa-oaep-mgf1p">
      <DigestMethod xmlns="http://www.w3.org/2000/09/xmldsig#" 
                    Algorithm="http://www.w3.org/2000/09/xmldsig#sha1">
      </DigestMethod>
   </EncryptionMethod>
   <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
      <SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <Reference URI="#SecurityToken-4EC1997A-AD6B-48E3-9E91-8D50C8EA3B53" 
                    ValueType="[parts omitted]#X509v3">
         </Reference>
      </SecurityTokenReference>
   </KeyInfo>
   <CipherData>
      <CipherValue>WtE[parts omitted]bSyvg==</CipherValue>
   </CipherData>
   <ReferenceList>
      <DataReference URI="#Enc-143BBBAA-B75D-49EB-86AC-B414D818109F"></DataReference>
   </ReferenceList>
</EncryptedKey>

詳細

この要素の各部分は以下のとおりです。

  • <EncryptionMethod> は、対称鍵の暗号化に使用されたアルゴリズムを示します。

    Caché では、鍵転送アルゴリズムを指定できます (<EncryptionMethod>Algorithm 属性によって示されます)。“鍵転送アルゴリズムの指定” を参照してください。

  • <KeyInfo> は、この対称鍵の暗号化に使用された鍵を特定します。Caché では、<KeyInfo> に以下のいずれかの形式の <SecurityTokenReference> が含まれます。

    • 前述の例で示したように、WS-Security ヘッダ内で前に位置する <BinarySecurityToken> への参照。

    • 証明書を一意に特定する情報。これは、メッセージ受信者が所有していることを想定しています。例えば、<SecurityTokenReference> には、以下のように証明書の SHA1 サムプリントを記述できます。

      <SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <KeyIdentifier EncodingType="[parts omitted]#Base64Binary" 
                        ValueType="[parts omitted]#ThumbprintSHA1">
            maedm8CNoh4zH8SMoF+3xV1MYtc=
         </KeyIdentifier>
      </SecurityTokenReference>
      
      

    いずれの場合も、この <EncryptedKey> 要素に保持される対称鍵の暗号化には、対応する公開鍵が使用されています。

    この要素は、暗号化が最上位レベルの <ReferenceList> 要素を使用する場合、省略されます。“<ReferenceList>” を参照してください。

  • <CipherData> は、<CipherValue> 要素の値として、暗号化された対称鍵を保持します。この例では、値 WtE[parts omitted]bSyvg== が暗号化された対称鍵です。

  • <ReferenceList> は、このメッセージの <EncryptedKey> 要素に保持された対称鍵を使用して暗号化された部分を示します。具体的には、<DataReference>URI 属性は、メッセージの他の部分の <EncryptedData> 要素の Id 属性を指します。

    使用する手法に応じて、この要素が含まれない場合があります。代わりに、最上位レベルの <ReferenceList> 要素を使用して、<EncryptedData> と対応する <EncryptedKey> をリンクすることも可能です。“<ReferenceList>” を参照してください。

メッセージ内での位置

<EncryptedKey> 要素は、<Security> 内で、この要素が使用するすべての <BinarySecurityToken> よりも後、かつ、この要素を参照するすべての <EncryptedData> 要素および <DerivedKeyToken> 要素よりも前に組み込まれる必要があります。

<EncryptedData>

<EncryptedData> の目的は、暗号化されたデータを保持することです。以下は、部分的な例です。

<EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#" 
               Id="Enc-143BBBAA-B75D-49EB-86AC-B414D818109F" 
               Type="http://www.w3.org/2001/04/xmlenc#Content">
   <EncryptionMethod Algorithm="[parts omitted]#aes128-cbc"></EncryptionMethod>
   <CipherData>
      <CipherValue>MLwR6hvKE0gon[parts omitted]8njiQ==</CipherValue>
   </CipherData>
</EncryptedData>

詳細

この要素の各部分は以下のとおりです。

  • Id は、この要素の一意の識別子です。Caché は、これを自動的に生成します。

  • <EncryptionMethod> は、このデータの暗号化に使用されたアルゴリズムを示します。

    Caché では、このアルゴリズムを指定できます。“ブロック暗号化アルゴリズムの指定” を参照してください。

  • <CipherData> は、<CipherValue> 要素の値として、暗号化されたデータを保持します。この例では、値 MLwR6hvKE0gon[parts omitted]8njiQ== が暗号化されたデータです。

  • (この例には含まれていません) <KeyInfo> は、対称鍵を特定します。この場合、<KeyInfo> には <SecurityTokenReference> 要素が含まれ、この要素には対称鍵への参照が以下のいずれかの形式で含まれます。

    • WS-Security ヘッダ内で前に位置する <DerivedKeyToken> への参照。

    • 暗黙的 <DerivedKeyToken> への参照。以下はその例です。

      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
         <SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd" 
                       s01:Nonce="mMDk0zn8V7WTsFaIjUJ7zg==" 
                       xmlns:s01="http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512">
            <Reference URI="#Id-93F97220-568E-47FC-B3E1-A2CF3F70B29B"></Reference>
         </SecurityTokenReference>
      </KeyInfo>
      

      この場合、<Reference>URI 属性は、<DerivedKeyToken> の生成に使用された <EncryptedKey> 要素を指し、Nonce 属性は、使用された Nonce 値を示します。

    いずれの場合も、この <EncryptedData> 要素に保持されるデータの暗号化には、この派生キーが使用されています。

    <KeyInfo> 要素は、暗号化が最上位レベルの <ReferenceList> 要素を使用する場合に記述します。“<ReferenceList>” を参照してください。

メッセージ内での位置

<EncryptedData> 要素は、<Security> 内で、関連付けられている <EncryptedKey> よりも後に組み込まれる必要があります。

<EncryptedData> 要素は SOAP 本文 (<Body> 要素) の子にすることもできます。

<Signature>

<Signature> の目的は、メッセージの受信者が検証できるデジタル・シグニチャを保持することです。デジタル・シグニチャを使用して、メッセージの変更を検出したり、リストされているエンティティによってメッセージの特定の部分が実際に生成されたことを検証したりできます。従来の手書きの署名と同様に、デジタル・シグニチャは、ドキュメントの作成者のみが作成できるドキュメントへの追加物で、簡単に偽造することはできません。

以下は、部分的な例です。

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
   <SignedInfo>
      <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
      </CanonicalizationMethod>
      <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256"></SignatureMethod>
      <Reference URI="#Timestamp-48CEE53E-E6C3-456C-9214-B7D533B2663F">
         <Transforms>
            <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform>
         </Transforms>
         <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>
         <DigestValue>waSMFeYMruQn9XHx85HqunhMGIA=</DigestValue>
      </Reference>
      <Reference URI="#Body-73F08A5C-0FFD-4FE9-AC15-254423DBA6A2">
         <Transforms>
            <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform>
         </Transforms>
         <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>
         <DigestValue>wDCqAzy5bLKKF+Rt0+YV/gxTQws=</DigestValue>
      </Reference>
   </SignedInfo>
   <SignatureValue>j6vtht/[parts omitted]trCQ==</SignatureValue>
   <KeyInfo>
      <SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <Reference URI="#SecurityToken-411A262D-990E-49F3-8D12-7D7E56E15081" 
                    ValueType="[parts omitted]oasis-200401-wss-x509-token-profile-1.0#X509v3">
         </Reference>
      </SecurityTokenReference>
   </KeyInfo>
</Signature>

詳細

この要素の各部分は以下のとおりです。

  • <SignedInfo> は、このシグニチャによって署名されるメッセージの部分を示し、その部分が署名の前にどのように処理されたかを示します。

    Caché では、ダイジェスト・メソッドを指定できます (<DigestMethod>Algorithm 属性によって示されます)。“ダイジェスト・メソッドの指定” を参照してください。

    シグニチャの計算に使用するアルゴリズムを指定することも可能です (<SignatureMethod>Algorithm 属性 によって示されます)。“シグニチャ・メソッドの指定” を参照してください。

  • <SignatureValue> は、実際のシグニチャを保持します。この場合、シグニチャは、 6vtht/[parts omitted]trCQ== です。

    この値は、署名された部分の連結されたダイジェストを暗号化することによって計算されます。暗号化は、送信者の秘密鍵を使用して実行されます。

  • <KeyInfo> は、シグニチャの作成に使用された鍵を特定します。Caché では、<KeyInfo> は、<SecurityTokenReference> を以下のいずれかの形式で記述します。

    • 前述の例で示したように、WS-Security ヘッダ内で前に位置する <BinarySecurityToken> への参照。この場合、シグニチャの作成には対応する秘密鍵が使用されています。

    • メッセージ受信者が以前に受信して格納した証明書を特定する情報。例えば、<SecurityTokenReference> には、以下のように証明書の SHA1 サムプリントを記述できます。

      <SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <KeyIdentifier EncodingType="[parts omitted]#Base64Binary" 
                        ValueType="[parts omitted]#ThumbprintSHA1">
            maedm8CNoh4zH8SMoF+3xV1MYtc=
         </KeyIdentifier>
      </SecurityTokenReference>
      
      

      前の場合と同様に、シグニチャの作成には対応する秘密鍵が使用されています。

    • WS-Security ヘッダ内で前に位置する <DerivedKeyToken> への参照。以下はその例です。

      <SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <Reference URI="#Enc-BACCE807-DB34-46AB-A9B8-42D05D0D1FFD"></Reference>
      </SecurityTokenReference>
      
      

      この場合、シグニチャは、そのトークンが示す対称鍵によって作成されています。

    • 暗黙的 <DerivedKeyToken> への参照。以下はその例です。

      <SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd" 
                    s01:Nonce="mMDk0zn8V7WTsFaIjUJ7zg==" 
                    xmlns:s01="http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512">
         <Reference URI="#Id-93F97220-568E-47FC-B3E1-A2CF3F70B29B"></Reference>
      </SecurityTokenReference>
      
      

      この場合、<Reference>URI 属性は、<DerivedKeyToken> の生成に使用された <EncryptedKey> 要素を指し、Nonce 属性は、使用された Nonce 値を示します。

      前の場合と同様に、データの暗号化には派生キーが使用されています。

メッセージ内での位置

<Signature> 要素は、<Security> 内で、この要素が使用する <BinarySecurityToken> または <DerivedKeyToken> よりも後に組み込まれる必要があります (これらがある場合)。

<DerivedKeyToken>

<DerivedKeyToken> の目的は、同じ対称鍵を生成するために、送信者と受信者の両者が独立して使用できる情報を保持することです。両者は、この対称鍵を使用して、SOAP メッセージの関連付けられた部分の暗号化、解読、署名、およびシグニチャ検証を実行できます。

以下は、部分的な例です。

<DerivedKeyToken xmlns="[parts omitted]ws-secureconversation/200512" 
                 xmlns:wsc="[parts omitted]ws-secureconversation/200512" 
                 wsu:Id="Enc-943C6673-E3F3-48E4-AA24-A7F82CCF6511">
   <SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
      <Reference URI="#Id-658202BF-239A-4A8C-A100-BB25579F366B"></Reference>
   </SecurityTokenReference>
   <Nonce>GbjRvVNrPtHs0zo/w9Ne0w==</Nonce>
</DerivedKeyToken>

詳細

この要素の各部分は以下のとおりです。

  • Id は、この要素の一意の識別子です。Caché は、これを自動的に生成します。

  • <EncryptionMethod> は、このデータの暗号化に使用されたアルゴリズムを示します。

    Caché では、このアルゴリズムを指定できます。“ブロック暗号化アルゴリズムの指定” を参照してください。

  • <SecurityTokenReference> は、派生キーを計算するときに基盤として使用する対称鍵を示します。これには、<EncryptedKey> または同じメッセージの別の <DerivedKeyToken> のいずれかを指す URI 属性を持つ <Reference> 要素を含めることができます。

    または、<SecurityTokenReference> には、使用された <EncryptedKey> の SHA1 ハッシュを参照する <KeyIdentifier> を含めることができます。以下はその例です。

    <SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd" 
                                   s01:TokenType="[parts omitted]#EncryptedKey" 
                                   xmlns:s01="h[parts omitted]oasis-wss-wssecurity-secext-1.1.xsd">
       <KeyIdentifier EncodingType="[parts omitted]#Base64Binary" 
                                  [parts omitted]#EncryptedKeySHA1">
                         U8CEWXdUPsIk/r8JT+2KdwU/gSw=
       </KeyIdentifier>
    </SecurityTokenReference>
    
  • <Nonce> は、この派生キーの鍵導出関数で seed に使用された Base 64 のエンコード値です。

<DerivedKeyToken> 要素の計算には、RFC 2246 の TLS 用に定義されたメカニズムのサブセットを使用します。

<DerivedKeyToken> 要素と関連付けられた <EncryptedData> 要素または <Signature> 要素との関係は、以下のように処理されます。

  • <DerivedKeyToken> には、一意の識別子付きの Id 属性が含まれます。

  • 指定された <DerivedKeyToken> が示す対称鍵で暗号化された各 <EncryptedData> 要素内には、その <DerivedKeyToken> を指している URI 属性を持つ <SecurityTokenReference> 要素があります。

  • 指定された <DerivedKeyToken> が示す対称鍵によって計算された値を持つ各 <Signature> 要素内には、その <DerivedKeyToken> を指している URI 属性を持つ <SecurityTokenReference> 要素があります。

  • <EncryptedData> 要素と <Signature> 要素のそれぞれには、一意の識別子付きの Id 属性も含まれます。

  • WS-Security ヘッダには、<EncryptedData> 要素と <Signature> 要素を参照する <ReferenceList> 要素が含まれます。

メッセージ内での位置

<DerivedKeyToken> は、<Security> 内で、この要素を参照するすべての <EncryptedData> 要素および <Signature> 要素よりも前に組み込まれる必要があります。

<ReferenceList>

このセクションでは、メッセージ・ヘッダで <Security> の子として使用される場合の <ReferenceList> 要素について説明します。<ReferenceList> がこのように使用される場合、署名の前に暗号化を実行できます。以下にこの要素の例を示します。

<ReferenceList xmlns="http://www.w3.org/2001/04/xmlenc#">
   <DataReference URI="#Enc-358FB189-81B3-465D-AFEC-BC28A92B179C"></DataReference>
   <DataReference URI="#Enc-9EF5CCE4-CF43-407F-921D-931B5159672D"></DataReference>
</ReferenceList>

詳細

<DataReference> 要素において、URI 属性は、メッセージの他の部分の <EncryptedData> 要素の Id 属性を指します。

最上位レベルの <ReferenceList> 要素を使用する場合、<EncryptedKey><EncryptedData> では以下のように詳細が異なります。

シナリオ <EncryptedKey> <EncryptedData>
<EncryptedKey><EncryptedData> へのポインタが含まれる <KeyInfo> が組み込まれる (関連付けられたすべての <EncryptedData> 要素に対して同一になる) <KeyInfo> は組み込まれない
最上位レベルの <ReferenceList><EncryptedData> へのポインタが含まれる <KeyInfo> は組み込まれない <KeyInfo> が組み込まれる (各 <EncryptedData> 要素で異なる場合がある)

メッセージ内での位置

<ReferenceList> 要素は、<Security> 内で、関連付けられている <EncryptedKey> よりも後に組み込まれる必要があります。

FeedbackOpens in a new tab