LibreOfficeの文書とPDFに電子署名するよ
この記事は「LibreOffice Advent Calendar 2015」の12/10の記事です。
LibreOfficeには、LibreOffice文書や出力するPDFに電子署名(LibreOfficeの訳語では「デジタル署名」)を使って署名をする機能があります。 とはいうものの、電子署名について説明した日本語文書がまったくなく放置していましたがネタとして使えるかと思って引っ張り出してきました。
参考
- How to use digital Signatures - Apache OpenOffice Wiki: https://wiki.openoffice.org/wiki/How_to_use_digital_Signatures
免責事項
この記事に書いてあることを実行して何らかの被害を被ったとしても野方は一切責任を持ちません。
LibreOfficeの電子署名ってなんなの
まず電子署名をざっくり言うと、電子文書の正当性を示すためにおこなうための電子的な署名で、文書を入手した人は署名を検証することで、それが正しいものであるか確認できるようになります。
LibreOfficeでは、認証局により発行された証明書を使った署名と時刻を付与するタイムスタンプの署名が使えます。 二つを利用することで本人証明、非改ざん証明と存在証明ができて文書の信用が保たれるということですね。
どうやって使うの
電子署名をするには、認証局が発行するクライアント証明書が必要になりますが、無償で利用できるものでは、CAcertが使えます。 実際に利用するための手順をYouTubeで公開している方がいます。
- libreoffice calc sign a document with certificate - YouTube: https://www.youtube.com/watch?v=kmCdD-uIX_o
英語が分からなくても動画の手順をなぞれば使えます。そして、CAcertについて詳しく知りたい人はDebian勉強会の資料をご覧ください。
マイナンバーの個人番号カードで署名はできるのかい?
文書の電子署名で一番利用したいのは、住基カードやマイナンバーの個人番号カードを利用した署名だと思います。
これは、おそらく使えるはずではあるけれど、自分の住基カードはパスワード間違いでロックされてしまい、解除は市役所まで行かなければならずモタモタしてたらマイナンバーが始まり、個人番号カードの発行は年明けになると思うので試せない…。
なので、思いつく手順を書くとLibreOfficeからカードリーダーは直接利用できないので、WindowsかMacの専用ソフトから自分の証明書を証明書ファイル(.cer)を書き出し、それをPCにインポート。そして署名として利用になると思います。 この辺を参照してください。
- ファイルの出力方法 : 公的個人認証サービス ポータルサイト: https://www.jpki.go.jp/download/howto_win/certificate_p02.html
- Acrobat XI「ICカード形式の電子証明書を使ってPDFに署名を付ける方法について教えて... | Adobe Community: https://forums.adobe.com/thread/1585803
タイムスタンプの署名はできるのかい?
タイムスタンプについては、月20件までは無償で利用できるセイコーソリューションズの「かんたんタイムスタンプ」が利用できるはずですが、会員登録でめげてしまったのでパスさせてください。誰か検証してもらえるとうれしいです。
見たところ、オプション(メニュー[ツール]→[オプション])の[LibreOffice]→[セキュリティ]にある「TSA」に時刻認証局のURLを登録すれば使えるような気がします。
自己署名証明書を使った署名を試してみた
これだけで終わってもよかったのですが、やはり署名をしてみたいと思い、自己署名証明書を作成して試してみました。 自己署名証明書(オレオレ証明書)なので署名してもなんの効力もありません。
クライアント証明書の作成
こんな感じでクライアント証明書を作ってみました。 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が出力されます。
Acrobat Readerで見てみる
Acrobat Readerで署名を見てみましょう。
ちゃんと署名がされているようですね。
証明書の削除
以上で署名のテストは終わりましたが、確認ができれば今回作成した証明書は不要なので削除しておきましょう。
Windowsでは、Internet Explorerを起動してインターネットオプションを開きます。 [コンテンツ]タブにある[証明書]ボタンを押すと証明書の管理画面が開くので、登録した証明書を削除します。
Linuxは、Firefoxから証明書の登録同様、設定画面の[証明書]にある「証明書マネージャ」を開き、登録した証明書を削除します。
最後に
LibreOfficeの電子署名は、出力するPDFまで電子署名ができて、しかもLinuxでも問題なく利用できます。 ぜひ活用してみてください。
明日の「LibreOffice Advent Calendar 2015」は、あわしろいくやさんによる「PandocでMarkdownをODTに変換する」です。 去年のAdvent Calendarで「PandocとLibreOffice WriterでiDエディタのマニュアルを製本する」という記事を書きましたが、いくやさんからどんなネタが飛び出すのか楽しみです!
よろしくお願いします!