LibreOfficeの文書とPDFに電子署名するよ

nogajun
nogajun

_

この記事は「LibreOffice Advent Calendar 2015」の12/10の記事です。

LibreOfficeには、LibreOffice文書や出力するPDFに電子署名(LibreOfficeの訳語では「デジタル署名」)を使って署名をする機能があります。 とはいうものの、電子署名について説明した日本語文書がまったくなく放置していましたがネタとして使えるかと思って引っ張り出してきました。

参考

免責事項

この記事に書いてあることを実行して何らかの被害を被ったとしても野方は一切責任を持ちません。

LibreOfficeの電子署名ってなんなの

まず電子署名をざっくり言うと、電子文書の正当性を示すためにおこなうための電子的な署名で、文書を入手した人は署名を検証することで、それが正しいものであるか確認できるようになります。

LibreOfficeでは、認証局により発行された証明書を使った署名と時刻を付与するタイムスタンプの署名が使えます。 二つを利用することで本人証明、非改ざん証明と存在証明ができて文書の信用が保たれるということですね。

どうやって使うの

電子署名をするには、認証局が発行するクライアント証明書が必要になりますが、無償で利用できるものでは、CAcertが使えます。 実際に利用するための手順をYouTubeで公開している方がいます。

英語が分からなくても動画の手順をなぞれば使えます。そして、CAcertについて詳しく知りたい人はDebian勉強会の資料をご覧ください。

マイナンバーの個人番号カードで署名はできるのかい?

文書の電子署名で一番利用したいのは、住基カードやマイナンバーの個人番号カードを利用した署名だと思います。

これは、おそらく使えるはずではあるけれど、自分の住基カードはパスワード間違いでロックされてしまい、解除は市役所まで行かなければならずモタモタしてたらマイナンバーが始まり、個人番号カードの発行は年明けになると思うので試せない…。

なので、思いつく手順を書くとLibreOfficeからカードリーダーは直接利用できないので、WindowsかMacの専用ソフトから自分の証明書を証明書ファイル(.cer)を書き出し、それをPCにインポート。そして署名として利用になると思います。 この辺を参照してください。

タイムスタンプの署名はできるのかい?

タイムスタンプについては、月20件までは無償で利用できるセイコーソリューションズの「かんたんタイムスタンプ」が利用できるはずですが、会員登録でめげてしまったのでパスさせてください。誰か検証してもらえるとうれしいです。

見たところ、オプション(メニュー[ツール]→[オプション])の[LibreOffice]→[セキュリティ]にある「TSA」に時刻認証局のURLを登録すれば使えるような気がします。

TSA

自己署名証明書を使った署名を試してみた

これだけで終わってもよかったのですが、やはり署名をしてみたいと思い、自己署名証明書を作成して試してみました。 自己署名証明書(オレオレ証明書)なので署名してもなんの効力もありません。

クライアント証明書の作成

こんな感じでクライアント証明書を作ってみました。 Linuxでhttpsのサーバーを構築したことのある人は、おなじみだと思います。鍵長はいじってません。

 $ openssl genrsa -out client.key # 秘密鍵作成
 $ openssl req -new -key client.key -out client.csr # CSR作成
 $ openssl x509 -in client.csr -out client-ca.crt -req -signkey client.key # サーバー証明書作成
 $ openssl pkcs12 -export -inkey client.key -in client-ca.crt -out client.p12 # クライアント証明書作成

最後で作成したclient.p12がクライアント証明書になります。

クライアント証明書のインポートと署名

署名をするためにクライアント証明書をインポートします。

インポート方法はOSによって異なり、Windowsではクライアント証明書ファイルをダブルクリックすると「証明書ウィザード」が起動するので、そのまま進めればインポートできます。 パスワードは設定していなければ空のままで進むはずです。

証明書ウィザード

Linuxでは、Firefox/Iceweaselを利用して登録します。 Firefoxを起動して設定画面(メニュー[設定])を開きます。[詳細]→[証明書]に進み、[証明書を表示]ボタンを押すと「証明書マネージャ」起動するので、[インポート]ボタンを押してクライアント証明書ファイルを指定します。

証明書マネージャ

パスワードは、なければ空のままOKボタンを押します。インポートできれば「証明書と秘密鍵が正常に復元されました。」とダイアログが表示され、証明書が登録されます。

続いてLibreOfficeの「証明書のパス」がFirefoxになっているか確認します。 LibreOfficeを起動してオプション画面(メニュー[ツール]→[オプション])を開きます。 [LibreOffice]→[セキュリティ]に進み、[証明書へのパス]ボタンを押し、パスがFirefoxになっていればOKです。なっていなければ変更してください。

証明書のパス

電子署名をする

証明書が用意できれば署名は簡単です。

LibreOffice文書に署名をするには、一度、ファイルを保存して、メニュー[ファイル]→[デジタル署名]を開きます。 [ドキュメントに署名]ボタンを押すと「証明書の選択」ダイアログが開くので、署名に使う証明書を選択。 [証明書を表示]ボタンから証明書を確認をします。

電子署名

証明書を表示してみたけど、これは「非公開鍵」ではなくて「秘密鍵」じゃないだろうか。 翻訳の修正をしてもらおう。

秘密鍵じゃなくて?

それはさておき、問題がなければOKボタンを押すと署名できます。

続いてPDFの署名ですが、PDFに署名をするにはメニュー[ファイル]→[PDFとしてエクスポート]を開きます。 「PDFオプション」ダイアログの「デジタル署名」タブに移動し、[選択]ボタンから文書の署名と同様に証明書を指定します。あとは必要な情報や時刻認証局を利用する場合は指定などを設定し、エクスポートすれば署名付きPDFが出力されます。

PDFのエクスポート

Acrobat Readerで見てみる

Acrobat Readerで署名を見てみましょう。

Acrobat

ちゃんと署名がされているようですね。

証明書の削除

以上で署名のテストは終わりましたが、確認ができれば今回作成した証明書は不要なので削除しておきましょう。

Windowsでは、Internet Explorerを起動してインターネットオプションを開きます。 [コンテンツ]タブにある[証明書]ボタンを押すと証明書の管理画面が開くので、登録した証明書を削除します。

証明書を削除

Linuxは、Firefoxから証明書の登録同様、設定画面の[証明書]にある「証明書マネージャ」を開き、登録した証明書を削除します。

最後に

LibreOfficeの電子署名は、出力するPDFまで電子署名ができて、しかもLinuxでも問題なく利用できます。 ぜひ活用してみてください。

明日の「LibreOffice Advent Calendar 2015」は、あわしろいくやさんによる「PandocでMarkdownをODTに変換する」です。 去年のAdvent Calendarで「PandocとLibreOffice WriterでiDエディタのマニュアルを製本する」という記事を書きましたが、いくやさんからどんなネタが飛び出すのか楽しみです!

よろしくお願いします!