XML 署名

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  ユーザーマニュアル > XML >

XML 署名

XML ファイルにはデジタル署名を施して、署名の検証を行うことができます。署名が行われた後にファイルが変更された場合、検証に失敗することになります。XMLSpy では XML 署名の作成ならびに検証がサポートされます。

 

XMLSpy ビューにおける XML 署名

XML 署名は XML スキーマや WSDL、XBRL を含む全種類の XML ファイルに対して作成することができます。XML | XML 署名の作成ならびにXML | XML 署名の検証コマンドは XMLSpy テキストビューグリッドビュースキーマビューWSDL ビュー、そして XBRL ビューにて利用することができます。

 

XML 署名の動作原理

署名の作成から検証まで、以下のような流れで行われます:

 

1.証明書の秘密鍵またはパスワードにより XML ファイルが署名されます。XMLSpy では、XML | XML 署名の作成 コマンドにより署名を作成することができます。署名は、(i) XML ドキュメントを処理して、(ii) 証明書の秘密鍵またはパスワードを処理することで作成されます。
2.署名は XML ファイル内部に保管できるほか、独立したファイルとしても保管することができます。
3.XML ファイルの署名は、証明書の公開鍵またはパスワードにより行われます。検証は、(i) XML ドキュメントを処理、(ii) 署名に使用された証明書の公開鍵またはパスワードを処理して、その結果を署名と比較することで行われます。署名が行われた後に XML ファイルが変更されると、検証に失敗することになります。XMLSpy では XML | XML 署名の検証 コマンドにより署名の検証を行うことができます。

 

XMLSpy にて署名の作成ならびに検証を行う方法については、このセクション以下にあるサブセクションを参照ください:

 

XML 署名の作成
XML 署名の検証

 

XML 署名にて証明書を使用する方法

証明書を XML 署名に使用するには、証明書に対応した秘密鍵ならびに公開鍵が必要になります。秘密鍵は XML 署名の作成時に使用され、XML 署名の検証を行う際には公開鍵が必要になります。

 

通常であれば、XML ドキュメントの送信者が証明書の秘密鍵に対するアクセス権限を持っており、XML 署名が作成されます。ドキュメントの受信者は証明書の公開鍵へアクセスすることになります。公開鍵へアクセスするには2つの方法があります: (i) 送信された署名内にある公開鍵情報へアクセス、(ii) 送信者が使用した証明書の公開鍵へアクセスする。

 

証明書に関する詳細については、証明書を使用するセクションを参照ください。

 

メモXMLSpy の XML 署名機能では、RSA-SHA1 ならびに DSA-SHA1 および SHA-256 の証明書のみがサポートされます。パスワードをベースにする署名は、 HMAC-SHA256 アルゴリズムを使用します (XMLSpy 2018 以降に関しては、XML 署名の作成 を参照してください)。

 

 

XML ドキュメントの確認

XML ドキュメント内に XML 署名が埋めこまれている場合、http://www.w3.org/2000/09/xmlsig# 名前空間にある Signature 要素が XML ドキュメントに追加されます。スキーマに従う形でドキュメントの妥当性を保つためには、適切な要素宣言をスキーマに加える必要があります。XMLSpy では 2 つの方法で署名を埋め込むことができます:

 

Enveloped :ルート要素(またはドキュメント要素)最後の子要素として、Signature 要素が作成されます。
EnvelopingSignature 要素がルート要素(またはドキュメント要素)として作成され、オリジナルの XML ドキュメント要素が、Object という名前で Signature 要素の子要素として埋めこまれます。

 

XML ドキュメントのスキーマを修正しない場合、XML 署名を外部ファイルとして作成することができます。詳細については、XML 署名の作成セクションにある配置に関する記述を参照ください。

 

Enveloped された署名の Signature 要素が許されるような XML スキーマの抜粋を以下に示します。以下にあるサンプルをガイドとして使用しながら、スキーマの修正を行ってください。

 

以下にあるうちの最初の例では、XML 署名スキーマがユーザーのスキーマにインポートされます。XML 署名スキーマは http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd  という Web アドレスに配置されています。

 

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

          xmlns:xsig="http://www.w3.org/2000/09/xmldsig#" 

           elementFormDefault="qualified" 

           attributeFormDefault="unqualified">

  <xs:import namespace="http://www.w3.org/2000/09/xmldsig#"

            schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"/>

   <xs:element name="Root">

      <xs:complexType>

         <xs:sequence>

            <xs:element ref="FirstChildOfRoot"/>

            <xs:element ref="SecondChildOfRoot" minOccurs="0"/>

            <xs:element ref="ThirdChildOfRoot" minOccurs="0"/>

            <xs:element ref="xsig:Signature" minOccurs="0"/>

         </xs:sequence>

      </xs:complexType>

   </xs:element>

   ...

</xs:schema>

 

以下にある2つ目のサンプルでは、他の名前空間にある全ての要素にマッチする一般的なワイルドカード要素を追加します。processContents 要素を lax にセットすることで、バリデーターの検証処理でその要素の検証がスキップされます(マッチする要素宣言が見つからないため)。結果として、ユーザーは XML 署名スキーマを参照する必要がなくなります。しかしこの方法を使用すると、(Signature 要素に限らない)全ての要素を XML ドキュメントの特定位置に加えることが可能になってしまいます。

 

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 

           elementFormDefault="qualified" 

           attributeFormDefault="unqualified">

   <xs:element name="Root">

      <xs:complexType>

         <xs:sequence>

            <xs:element ref="selection"/>

            <xs:element ref="newsitems" minOccurs="0"/>

            <xs:element ref="team" minOccurs="0"/>

            <xs:any namespace="##other" minOccurs="0" processContents="lax"/>

         </xs:sequence>

      </xs:complexType>

   </xs:element>

   ...

</xs:schema>

 

 

W3C 仕様

XML 署名に関する詳細については、W3C の XML 署名に関する仕様を http://www.w3.org/TR/xmldsig-core/ から参照ください。

 

 

 

 

 


(C) 2018 Altova GmbH