Linux & NFC & マイナンバーカード & JSignPdf
Linux & NFC & マイナンバーカード & JSignPdfでPDFに署名
2024-03-20
(1).結論
- Linux & IO DATA USB-NFC4 & マイナンバーカード でIO DATAのNFCが使え、サインできてハッピーさ
- JSignPdf-2.2.2で、サインできた!
- GUIでもコマンドラインでもいけるよ!
(2).環境
- Ubuntu 22.04
- JSignPdf 2.2.2
- IO DATA USB-NFC4
(3).参考サイト
-
最近の電子署名事情ってどうよ
https://qiita.com/mtakatou/items/8f59ab96a1ee1add1e7c
(4).事前準備
参考サイト 3, 4 で、LibreOffice を使用して動作するところまでやっておくとよいかも。
- 以前の記事で、NFC + マイナンバーカードを、Ubuntu + OpenSC で動作させた。
- 以前の記事で、Ubuntu システムに JPKI の CA を入れた。
- 以前の記事で、TSA を選ぶことも行った。
(5).詳細
(5)-1. JSignPDF 設定
少しだけ変更が必要そう。
公式サイトから download し、展開したあと、conf/
以下のファイルを変更
pkcs11config.path=conf/pkcs11.cfg
tsa.hashAlgorithm=SHA-256
name=OpenSC-PKCS11
library=/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
slot=1
(5)-2. JSignPDF GUIの文字がきたない
早速ためしてみる。
カードリーダーとマイナンバーカードはセットしておく。
$ ./jsignpdf.sh
普通 Relaxing SSL security.
普通 Registering SunPKCS11 provider from configuration in conf/pkcs11.cfg
普通 PKCS11 provider registered with name SunPKCS11-OpenSC-PKCS11
普通 PKCS11 provider registered with name JSignPKCS11-OpenSC-PKCS11
メッセージをみておく。
-
conf/pkcs11.cfg
ファイルがよめていること。 -
PKCS11
がregistered
になっていること。
これで動くはず
しかし、
GUIの文字が汚い........
Java、よーわからん。
なにやらJavaのオプションにゴニョゴニョ足すと良いらしい。
jsignpdf.sh
を変更して、オプションつけてみた
--- jsignpdf.sh.orig 2023-08-14 21:03:56.000000000 +0900
+++ jsignpdf.sh 2023-09-15 07:57:46.768597041 +0900
@@ -5,6 +5,12 @@ DIR=$(cd "$DIRNAME" || exit 112; pwd)
[ "$OSTYPE" = "cygwin" ] && DIR="$( cygpath -m "$DIR" )"
+if [[ -x /usr/lib/jvm/default-java/bin/java ]]; then
+ export JAVA_HOME=/usr/lib/jvm/default-java
+fi
+export JAVA_FONTS=/usr/share/fonts/truetype:/usr/local/share/fonts
+JAVA_OPTS="${JAVA_OPTS} -Dawt.useSystemAAFontSettings=gasp -Dswing.aatext=true -Dswing.plaf.metal.controlFont=monospaced-16 -Dswing.plaf.metal.userFont=monospaced-16"
+
JAVA=java
if [ -n "$JAVA_HOME" ]; then
JAVA="$JAVA_HOME/bin/java"
-
JAVA_FONTS
をセットする。 -
-Dawt.useSystemAAFontSettings=gasp -Dswing.aatext=true
が良いらしい。 -
-Dswing.plaf.metal.controlFont=monospaced-16 -Dswing.plaf.metal.userFont=monospaced-16
はフォントサイズ、フォント種類。 -
JAVA_HOME
は Ubuntu の環境にあわせんがため。
(5)-3. PDFファイル指定、マイナンバーカード指定
GUIのメインの画面で
- [詳細表示設定] : チェック。
- [キーストアタイプ] :
PKCS11
にする。 - [入力 PDF ファイル] : 署名したい PDF ファイル指定。[出力 PDF ファイル]が自動でセットされる。
- [ハッシュアルゴリズム]:
SHA-1
以外にする。 - [TSA/OCSP/CRL] : TSAサーバーを指定。別ウインドウが出る。
まだ [Sign It] を押さないでね!
マイナンバーカードがちゃんとよめているかが大事。何度もパスワード間違えるとたいへん。
- [キーストアパスワード]: マイナンバーカードの、**長〜いパスフレーズ(署名用)**を入力
- [パスワードを記憶する]: お好きに。
この状態で、
- [キー読み込み]をクリック。
マイナンバーカードよみこみに成功すれば、
- [フレンドリ名]
に
Digital Signature Certificate
が表示される。
これで
[Sign It]
をクリックする。
出力例
情報 Starting JSignPdf
情報 Checking input and output PDF paths.
情報 Getting key alias
情報 Used key alias: Digital Signature Certificate
情報 Loading private key
情報 Getting certificate chain
情報 Opening input PDF file: /tmp/a4.pdf
情報 Creating output PDF file: /tmp/a4_signed.pdf
情報 Creating signature
情報 Updating PDF version info 1.4 -> 1.6
情報 Setting certification level
情報 Processing (it may take a while) ...
普通 KeyStore type PKCS11 is supported by the provider SunPKCS11-OpenSC-PKCS11
情報 Creating TSA client.
情報 Setting TSA hash algorithm: SHA-256
情報 Closing result PDF stream
情報 Finished: Signature succesfully created.
成功。
JsignPDFは、suffix をつけたファイルにサインしたPDFを出力する。
例では、サインしたファイルは /tmp/a4_signed.pdf
になる。
以前紹介した PDF Studio Viewer などで見れば、サインされたかがわかる。
(5)-4. TSA指定
TSA の設定は、メイン画面の
- [TSA/OCSP/CRL]
をクリックして行う。
クリックすると、別ウインドウが現れる。
- [TSA(タイムスタンプサーバー)を使う]: チェック。
- [TSA URL]: LibreOffice で使用した TSA サーバーを指定してみる。
(5)-5. コマンドラインでどうやんの?
コマンドラインでできるし、バッチも組める。
一度 GUI を実行し、終了させると、
~/.JSignPdf
ファイルに、GUIの指定が記録されている。
keystore.type=PKCS11
keystore.alias=Digital Signature Certificate
inpdf.file=/tmp/a4.pdf
outpdf.file=/tmp/a4_signed.pdf
hash.algorithm=SHA256
tsa.url=http\://tss.accv.es\:8318/tsa
コマンドはデフォルトで ~/.JSignPdf
を使用するのかは知らない。
-lpf ~/.JSignPdf
オプションを指定すれば、かくじつに使用する。
よく同じ値を使用するなら、-lpf
オプションを使うと良いかもね。
基本的なオプションは次のようなかんじになるだろう。
$ ./jsignpdf.sh \
-ksp "マイナンバーカードの**長〜いパスフレーズ(署名用)**" \
-kst PKCS11 \
-tsh SHA256 \
-ts http://tss.accv.es:8318/tsa \
-d /tmp \
/tmp/a4.pdf
サイン対象のファイル(この例では/tmp/a4.pdf
)は、フルパスでなければうまくいかないことがあった。
問題は、署名用のパスフレーズを
-ksp
オプションでコマンドラインに渡すところ。
GUIで [パスワードを記憶する] したうえで
-lpf ~/.JSignPdf
をうまく使えるかどうか。試していない。
(5)-6. helpオプション
$ java -jar JSignPdf.jar -h
ドキュメントは、展開した下の
docs/JSignPdf.pdf
ファイル。
(6).他: RFC3161 TSA serverについて
日本もスペイン、エストニア、ベルギーみたいに、国(関係)が無料公開サーバーつくればよいのにね。
電子化であれやこれやを言うなら、つくってほしい。
税制からんで、変、あるいは無理じゃん!みたいになっている。
また国のCAを各ソフトに入れてもらうように、お願いして回るとかも必要でしょう。
あれ?
acrobatってTSA使って署名入れる機能あるが、あれって、adobeのTSAサーバーだよね。appleも持っていて公開だし。
日本は、日本がTSA認証した物をといいつつ、acrobatなどのデフォルトのTSA指定は良いっていうこと????
またTSA機能のない、ただの text ファイルとか zip とか、どないせいっちゅうんやろ。
OSS みたいに sha ハッシュファイル作ればよいのかね?
よーわからん。
知らねばならないことが増え過ぎで追いつかない。
制度を言い出した人達は、おそらく、自分が使ったことある一部だけをみて言っているのかもしれない。他のケースのこと頭に無いよね、多分。
エストニア、Linux、Firefoxをサポートしている。apt-getできたり。
もともと日本はLinux、Firefox無視であった。
で今年、確定申告関連サイトをログインしようとしたら、windows,macos用のソフトを入れなければならないようにかわっていた。
あららららら。死んだ。
やっぱり紙よね! webで電子申告するより紙で出そう!
以上
Discussion