XML暗号化の基礎と実践
後編 XML暗号化と電子署名の実践
(5/6)

5. XML文書に電子署名をしてみる

■XML文書に電子署名をする

 次に、XSS4JでXML文書に電子署名をしてみよう(XMLの電子署名については前編参照)。XML電子署名を行うには、以下のライブラリが必要だ。

  • Java2
  • Xerces 1.2
  • Xalan 2.0

 JDKは、サン・マイクロシステムズのJava.Sun.Comサイトの「Downloads」ページから取得できる。Xercesはここではバージョン1.2だが、、The Apache Software FoundationXerces Java Parser Readmeの左側にある「Download」メニューから取得でき、Xalanは同じサイトの「Xalan-Java version」 ページの下の方にある「Where do I get Xerces?」の欄のリンクからたどるといいだろう

■電子署名を外部ファイルとして出力

 ここでは、電子署名を体験するために、SampleSign2プログラムを稼働させてみよう。このプログラムは、入力されるXML文書に対して電子署名を行い、外部ファイルとして出力する。XSS4Jの電子署名ライブラリはいくつかのテクノロジを選択して使うことができるが、このプログラムは以下のテクノロジを使う。

  • 正規化:XML Canonicalization
  • ダイジェスト値の計算:SHA1
  • 署名:DSS

 以下のXML文書に電子署名をしてみることにしよう。

<?xml version="1.0" encoding="Shift_JIS" ?>
<name>
  <first>yukihisa</first>
  <last>yonemochi</last>
</name>
リスト5 input.xml

 例によって、バッチファイルで処理させる。こちらはXerces 1.xを使うようになっている。

set xss4j_home=D:\_work\xss4j
set extdirs=
set extdirs=%extdirs%;D:\IBMJava13\jre\lib\ext
set extdirs=%extdirs%;D:\_work\xerces-1_2_3
set extdirs=%extdirs%;D:\_work\xalan-j_2_3_1\bin
set extdirs=%extdirs%;%xss4j_home%

set classpath=%xss4j_home%\samples;%classpath%↓
set datapath=%xss4j_home%\data\dsig

Keytool -delete -alias Alice -storepass storepass
Keytool -genkey -alias Alice -keyalg DSA -dname "CN=Yukihisa Yonemochi,OU=SWG,O=IBM,C=JP" -keypass keypass
-storepass storepass

java -Djava.ext.dirs=%extdirs% dsig.SampleSign2 alice storepass keypass -embxml file:///input.xml > signature.xml
リスト6 電子署名を実行するバッチファイルSampleSign2(改行個所にはマークを付加した)

 input.xmlは、ルートに置いた。SampleSign2は、XSS4Jを展開したディレクトリのsamples/dsigディレクトリにある。

 実行結果は、signature.xmlファイルに書き込まれ、以下の署名データがXML文書として出力される。

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315">
</CanonicalizationMethod>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1">
</SignatureMethod>
<Reference URI="#Res0">
<Transforms>
<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"> </Transform>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>

<DigestValue>iv2ZpOiFQ+IgdkQnlla9EnDyCQg=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>
C0TbZYcZN2kc7/RcbVb4XCqngaVP5bKkchOYbC9pgBOpwIng4UfxBA==
</SignatureValue>
<KeyInfo>
<KeyValue>
<DSAKeyValue>
<P>
/X9TgR11EilS30qcLuzk5/YRt1I870QAwx4/gLZRJmlFXUAiUftZPY1Y+r/F9bow9s ubVWzXgTuAHTRv8mZgt2uZUKWkn5/oBHsQIsJPu6nX/rfGG/g7V+fGqKYVDwT7g/b
T xR7DAjVUE1oWkTL2dfOuK2HXKu/yIgMZndFIAcc=
</P>
<Q>l2BQjxUjC8yykrmCouuEC/BYHPU=</Q>
<G>
9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+Vd
MCz0HgmdRWVeOutRZT+Zx
BxCBgLRJFn Ej6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zK
Tx vqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSo=
</G>
<Y>
yCe9k4c46590L/NyK6TNbip
kRN2VyYEHEMAbbTNFdmJaAw3mH29elAhlTI5dRJ
ZndH  rISgXE1rwCH3w9vV4dWYQgn9wHPRqG8wfdELbOOkZglGdNkqBAVZi3Pe/WZ8EJV/IO j6Y
wrRj0J1qVwKHrSUcuyLNuKg9z4LXs855WMq4=
</Y>
</DSAKeyValue>
</KeyValue>
<X509Data>
<X509IssuerSerial>
<X509IssuerName>CN=Yukihisa Yonemochi,OU=SWG,O=IBM,C=JP</X509IssuerName>
<X509SerialNumber>1028198450</X509SerialNumber></X509IssuerSerial>
<X509SubjectName>CN=Yukihisa Yonemochi,OU=SWG,O=IBM,C=JP</X509SubjectName>
<X509Certificate>
MIICwjCCAn8CBD1JEDIwCwYHKoZIzjgEAwUAMEYxCzAJBgNVBAYTAkpQMQwwCgY
DVQQKEwNJQk0xDDAKBgNVBAsTA1NXRzEbMBkGA1UEAxMSWXVraWhpc2EgWW9uZW
1vY2hpMB4XDTAyMDgwMTEwNDA1MFoXDTAyMTAzMDEwNDA1MFowRjELMAkGA1UEB
hMCSlAxDDAKBgNVBAoTA0lCTTEMMAoGA1UECxMDU1dHMRswGQYDVQQDExJZdWtp
aGlzYSBZb25lbW9jaGkwggG4MIIBLAYHKoZIzjgEATCCAR8CgYEA/X9TgR11Eil
S30qcLuzk5/YRt1I870QAwx4/gLZRJmlFXUAiUftZPY1Y+r/F9bow9subVWzXgT
uAHTRv8mZgt2uZUKWkn5/oBHsQIsJPu6nX/rfGG/g7V+fGqKYVDwT7g/bTxR7DA
jVUE1oWkTL2dfOuK2HXKu/yIgMZndFIAccCFQCXYFCPFSMLzLKSuYKi64QL8Fgc
9QKBgQD34aCF1ps93su8q1w2uFe5eZSvu/o66oL5V0wLPQeCZ1FZV4661FlP5nE
HEIGAtEkWcSPoTCgWE7fPCTKMyKbhPBZ6i1R8jSjgo64eK7OmdZFuo38L+iE1Yv
H7YnoBJDvMpPG+qFGQiaiD3+Fa5Z8GkotmXoB7VSVkAUw7/s9JKgOBhQACgYEAy
Ce9k4c46590L/NyK6TNbipkRN2VyYEHEMAbbTNFdmJaAw3mH29elAhlTI5dRJZn
dHrISgXE1rwCH3w9vV4dWYQgn9wHPRqG8wfdELbOOkZglGdNkqBAVZi3Pe/WZ8E
JV/IOj6YwrRj0J1qVwKHrSUcuyLNuKg9z4LXs855WMq4wCwYHKoZIzjgEAwUAAz
AAMC0CFQCWW2Y2zIJnsbNLDU4PtmPsCmxTxwIUUPF03lToWnu/DQArR4CThXN5c
gk=
</X509Certificate>
</X509Data>
</KeyInfo>
<dsig:Object xmlns="" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" Id="Res0"><name>
<first>yukihisa</first>
<last>yonemochi</last>
</name>
</dsig:Object>
</Signature>
リスト7 署名結果となるsignature.xml(リストが見やすいように、適宜改行を入れて加工してある)

 この例では、Embedded方式の署名にしているので、インプットされたXML文書であるリスト5のinput.xmlが署名データに内包されている(青字部分)。

5/6

Index
XML暗号化の基礎と実践
前編〜XML暗号化と正規化と電子署名
  1. SSLの利用とXML暗号化の違い
  2. 電子署名とXML文書の正規化
  3. XML文書のアクセスポリシーとシングル・サインオン
後編〜XML暗号化と電子署名の実践
  4. XMLセキュリティ・スイートを使う
5. XML文書に電子署名をしてみる
  6. 署名された文書の改ざんを検証



XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間