e-Govで電子申請(一括申請)するためのプログラム作成に関する覚書

This item was created at 2010/11/21 00:00:00

e-GovユーザーのTakashi.Uです。

今年からe-Gov(電子申請)で一括申請が始まりました。複数の届出をまとめて一括で届けることが出来るという便利なサービスですが、通常の電子申請のようにブラウザ上で操作して行うのではなく、対応アプリ(様々専門アプリがあるようです)を使用しなければならず、若干残念なことになっています。

この度、残念な状況を打破すべく重い腰を上げてe-Gov一括申請をすることにしました。島根県民・松江市民なので当然にRubyを使ってということになります。躓いたり、理解するのに時間がかかったりしたところがあったので、覚書としてこのエントリーに記したいと思います。

『仕様公開 | e-Gov電子申請システム一括申請について』
http://shinsei.e-gov.go.jp/menu/interface/

仕様や電子証明書のサンプルが配布されています。こちらの仕様書に基づいてプログラムを作成します。

で、肝心な覚書ですが、次のことを列挙しておきたいと思います。

  • RubyとOpenSSLでの署名について
  • XMLの正規化について

RubyとOpenSSLでの署名について

Ruby(1.9.2)とOpenSSLで電子署名をするわけですが、opensslライブラリを使用するとすごく簡単に署名できます。ちなみにWindowsなのでRuby Installerを使わせていただいています。簡単に導入できてすごく良いです!

Ruby Installer
http://rubyforge.org/projects/rubyinstaller/

署名のコードですがこんな感じです。

require 'openssl'
require 'base64'

digester = OpenSSL::Digest::SHA1.new
pkcs12 = OpenSSL::PKCS12.new(File.open(key),password)
sig = Base64.encode64(pkcs12.key.sign(digester,str))

こんな感じであっさりと署名ができちゃいます。簡単ですね。

変数は次のものを想定しています。

  • key → .p12ファイル
  • password → 上記鍵のパスワード
  • str → 署名したい文字列

仕様書にあるX509Certificate要素は次のコードで求めることができます。

cer = Base64.encode64(pkcs12.certificate.to_der)

これまた簡単です。

XMLの正規化について

XMLの正規化を行う必要があります。XMLの正規化に関することは検索すればたくさん出てきます。

今回は、XMLを自分でイチから作らなければならなかったことと、RubyではXML正規化ライブラリを見つけられなかったことから、自分で作るXMLを正規化された状態にしておくという方針でいきました。

その際、特に注意しなければならなかったこと(嵌ったこと)は名前空間が継承されることです。不勉強なので知りませんでした。

【参考】Place Under Glacier: canonicalization and xml:id
http://veritas-vos-liberabit.com/mt/archives/2004/06/canonicalizatio.html

具体的には、次のXML(一部)があったとします。

<Signature xmlns="http://www.w3.org/…" Id="…">
  <SignedInfo>
    …

e-Govの仕様書によれば、署名対象はSignedInfoエレメントになります。しかし、そのまま署名してはダメです。名前空間の部分を継承しなければなりません。(もちろん、他の正規化要件も満たす必要があります。)

というわけで、署名対象のSignedInfoエレメントは次のようになります。

<SignedInfo xmlns="http://www.w3.org/…">
  …

これで、e-Govのシステムのチェックを通すことが出来ました。めでたしめでたし。

Top of "Mengurume Labs"

Shopping

Ruby on 松江ラーメン
あの松江ラーメンとRubyの異色コラボ商品です。売上の一部はRubyアソシエーションを通じてRubyの普及発展に使用されます。

Matsue Link

リンクを募集しています。@mengurumeまでどうぞ!

コミサイト
コミサイト

魔法の木
魔法の木

Recent Articles