はじめに
個人番号カード(マイナンバーカード)を早い段階で入手していたので、 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-keygen
とssh
コマンドを利用する。
公開鍵の抽出とログイン
マイナンバーカードで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 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。