NetBSDからマイナンバーカードの証明書を使ってsshログインする

はじめに

個人番号カード(マイナンバーカード)を早い段階で入手していたので、 OpenSSHでログインするために利用したいと思っていたのだが、 NetBSD上でのOpenSCなどの使い方が理解できずに放っておいてしまっていた。

ICカードリーダーを確定申告でしか使わないのはもったいないので、再度挑戦して、それなりに使えたので書いておく。 使っているICカードリーダーは、Gemalto (VID: 0x08e6)の接触式SmartCard Reader PC USB-TR (PID: 0x0307)である。

また、NetBSDは、NetBSD/amd64 9.99.8である。

ソフトウェアの準備

pkgsrcを使って以下のようにインストールする。

# cd /usr/pkgsrc/security/opensc
# make install
# cd /usr/pkgsrc/security/ccid
# make install
過去に試した際にはsecurity/ccidをインストールしていなかったので、pcscdでICカードを認識させられなかったようだ。 他にはNetBSD baseのssh-keygensshコマンドを利用する。

公開鍵の抽出とログイン

マイナンバーカードでSSHするの記事には、あまり詳しい操作方法が書かれたいないのだが、 man pageなどを読んでみると、pcscdを起動しておくことが必要だと分かった。 ただし、初回はpkgsrc/security/ccidをインストールしていなかったので、/etc/rc.d/pcscdから起動させても メッセージを見ることができないのもあって、状況が把握できなかった。 infoレベルでメッセージを出しつつ、フォアグラウンドでpcscdを実行してみた。 ICカードリーダーを接続した上で、以下のように起動させる。

# /usr/pkg/sbin/pcscd -f --info
その上で個人番号カードを ICカードリーダーに挿入すると、以下のように認識された。
00000124 Card ATR: 3B E0 00 FF 81 31 FE 45 14
元記事によると、以下のように実行することで利用者証明電子証明書の公開鍵をOpenSSHで使える形式で抽出できるはずであった。
$ pkcs15-tool --read-ssh-key 1 > id_rsa.pub
だが、以下のようにデコードすべきデータが取得できないためかエラーとなり抽出できない。
$ pkcs15-tool --read-ssh-key 1 > id_rsa.pub
Using reader with a card: Gemalto PC Twin Reader (6C55990E) 00 00
Public key enumeration failed: Required ASN.1 object not found
同じことをDebian GNU/Linux 10のOpenSCで試しても同じエラーになるし、Debian GNU/Linux 10で同じpkgsrcのOpenSCを使っても同じエラーになるので、 私の個人番号カードがそういう仕様なのか、OpenSCの方が変わったのかもしれない。 検索してみると、ssh-keygenコマンドもSmartCardを扱えるようなので、以下のように実行してみた。 これによって、4行のテキストファイルとして、OpenSSH形式の公開鍵を抽出できた。
$ ssh-keygen -D /usr/pkg/lib/opensc-pkcs11.so > mynum.pub
Enter PIN for 'User Authentication PIN (JPKI)':
Enter PIN for 'Digital Signature PIN (JPKI)':
私は電子署名用の鍵は使う予定はないのだが、なぜかそれ用のパスワードも入力させられてしまった。 この4つの公開鍵のうち、利用したいものは1行目のみであったので、それをログイン先の~/.ssh/authorized_keysに追記しておく。 その上で以下のように実行すれば良い。
$ ssh -I /usr/pkg/lib/opensc-pkcs11.so REMOTEHOST
Enter PIN for 'User Authentication PIN (JPKI)':
Enter PIN for 'Digital Signature PIN (JPKI)':
やはり、電子署名用の鍵のパスワードも必要になってしまう。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。

plgarc/wip/llama.cppでpkgsrcのBLASサポートを探る

この記事は、 NetBSD Advent Calendar 2024 の13日目の記事です。 llama.cppを使ってみる 以前に、 NetBSD/amd64でllama.cppを使ってみる という記事で llama.cpp を使ってみていました。 あれか...