4.XML文書に署名する (Java)
Javaによる電子署名の方法を説明します。Javaの開発環境はJDK1.5以上を想定していますが、セキュリティの観点から最新版を利用することを推奨します。
まずは、鍵を生成して署名する方法をサンプルを交えて説明します。
XML署名以外に以下のページもご参照ください。
まずは、鍵を生成して署名する方法をサンプルを交えて説明します。
XML署名以外に以下のページもご参照ください。
- Java暗号化拡張機能による暗号化[http://www.trustss.co.jp/Java/JEncrypt100.html]
- XML文書への電子署名(C# .NETFramework編)[http://www.trustss.co.jp/dsig/CSharp/1100.html]
4.1 XML署名とは
XML署名とは、XML文書変換の1つです。詳しくは、W3Cで既定されていますので確認してください。本ページでは、その詳細を説明せず既知としてJavaでそれを実装する方法を説明します。なお、XMLについても同様に詳細の説明を割愛します。
XML署名では、XMLかバイナリかにかかわらず、任意のデータに署名できます。XML署名は、Enveloping、EnvelopedおよびDetachedの3つの形式があり、署名データの<Refarence>要素内のURI属性によって識別されます。
この項目では、Enveloped形式の電子署名の施法を説明します。
XML署名では、XMLかバイナリかにかかわらず、任意のデータに署名できます。XML署名は、Enveloping、EnvelopedおよびDetachedの3つの形式があり、署名データの<Refarence>要素内のURI属性によって識別されます。
この項目では、Enveloped形式の電子署名の施法を説明します。
4.2 電子署名されるXML文書
電子署名されるXML文書です。Javaアプリケーションのサンプルで「org.xml」として利用します。
<root> <creditcard> <number>19834209</number> <expiry>02/02/2002</expiry> </creditcard> </root>
4.3 署名されたXML文書(結果)
Javaアプリケーションを説明する前に、DSA-SHA1 Enveloped形式で電子署名(変換)されたXML文書を先に説明します。(見やすくするためにインデント、改行を追加してありますのでご注意ください。)
(2) 署名データです。このサンプルでは、電子署名を1回だけ施しています。
(3) 正規化アルゴリズムです。
(4) XMLを保護する変換アルゴリズムを記した要素です。ダイジェストアルゴリズムなどが含まれます
(5) 復号用の鍵情報です。
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> (1) <creditcard> <number>19834209</number> <expiry>02/02/2002</expiry> </creditcard> <Signature (2) xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod (3) Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/> <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/> <Reference URI=""> (4) <Transforms> <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <DigestValue>qf9G+NGDr9YbsV4Tu1a8je/DCLE=</DigestValue> </Reference> </SignedInfo> <SignatureValue>VF6F0kq9SEFu/fmbdIo7LzJ4vUaBWEWXGTyuarQGc50mD6lCTe9yLg==</SignatureValue> <KeyInfo> (5) <KeyValue> <DSAKeyValue> <P>/KaCzo4Syrom78z3EQ5SbbB4sF7ey80etKII864WF64B81uRpH5t9jQTxeEu0ImbzRMqzVDZkVG9xD7nN1kuFw==</P> <Q>li7dzDacuo67Jg7mtqEm2TRuOMU=</Q> <G>Z4Rxsnqc9E7pGknFFH2xqaryRPBaQ01khpMdLRQnG541Awtx/XPaF5Bpsy4pNWMOHCBiNU0NogpsQW5QvnlMpA==</G> <Y>d6Oh4zgcbRAb2MJTWJyPvzgknYRnQiG+lJ1S5n08kBblxTF0MxtIZHfkhdggSEY2g7y4ORP7u8KSBm/7sFO/IQ==</Y> </DSAKeyValue> </KeyValue> </KeyInfo> </Signature> </root>(1) 署名データは、親要素(<root>)に含まれます。
(2) 署名データです。このサンプルでは、電子署名を1回だけ施しています。
(3) 正規化アルゴリズムです。
(4) XMLを保護する変換アルゴリズムを記した要素です。ダイジェストアルゴリズムなどが含まれます
(5) 復号用の鍵情報です。
次は、電子署名のJavaアプリケーションです。
お問い合わせは、こちらからお願いします。
(記載の会社名および製品名は、各社の登録商標および商標です。)