MAC でマイナンバーカードSSH認証をする方法が紹介されています。
今回、Windows 10/11 の GUI SSHクライアント( WinSCP や Teraterm ) でマイナンバーカードSSH認証を試してみました。SSHクライアントは直接スマートカード認証をサポートしていませんので、pagaent 経由で認証します。このため、SSHクライアントは pagaent を使った認証をサポートしていなければなりません。
準備
ICカードリーダでマイナンバーカードが読み取れる状態になっているものとします。
SSH設定
1. Putty-CAC 入手
2. OpenSC 入手
puTTY-CAC が64ビットであれば OpenSCは 64ビット版を入手
Pkcs#11 モジュールのみ必要
3. クライアント認証用公開鍵を ssh-key 形式で抽出
マイナンバーカードには2つのスロットがあります。仮想スロット0はクライアント認証用、仮想スロット1は署名用の証明書、公開鍵、秘密鍵が含まれています。
仮想スロット 0 (クライアント認証用)
証明書( 公開部分 )
Digital Signature Certificate CA id=4
User Authentication Certificate CA id=3
User Authentication Certificate id=1
公開鍵(公開部分)
Digital Signature Certificate CA id = 4
User Authentication Certificate CA id = 3
User Authentication Public Key id = 1
秘密鍵(秘密部分)
User Authentication Key id = 1
秘密部分にアクセスするにはスロット用の PIN が必要です。
SSH認証に必要なのは、仮想スロット0のクライアン認証用公開鍵( User Authentication Public Key id=1 ) 。PINは不要。これを ssh-key形式で取り出して、SSHサーバのログインするユーザのホームフォルダ内の .ssh フォルダ authorized_keys ファイルに貼り付けます。
一発で取り出す方法が見つからなかったため、専用のプログラムを用意しました。実行すると ssh-key 形式の公開鍵を表示。表示されたものをコピーして、sshサーバのauthorized_key に貼り付けます。
4. Putty-CAC pagaent 設定
スクリーン右下のシステムトレイに表示されるアイコンを右クリック。メニューで"View Keys & Certs" を選択。開いたダイアログで "Add PCKS Cert" ボタンをクリック
pkcs#11 モジュールのパスを選択。ファイルダイアログで opensc-pkcs11.dll (puTTY-CAC が64ビットであれば、64ビットDLL、32ビットであれば32ビットDLL)を選択。するとマイナンバーカードのクライアント認証証明書が表示されるはず。その証明書を選択するとリストボックスに表示されます。
最後にダイアログ下の Fingerprint Type を必ず "SHA256 including" に設定(**重要**)
"Close"ボタンでウィンドウを閉じます( pageant はシステムトレイに残っています )
5. pageant 対応の SSHクライアント(WinSCP/TeraTerm 等)でSSH認証
SSHサーバのホームフォルダ内の .ssh - authorized_keyに公開鍵を設定したユーザでログイン。
認証は必ず pagaentを使うように設定します。
認証処理中に PuTTY Authentication ダイアログが表示されパスワードを求められたらクライアント認証用 PIN を入力 (3度間違えるとロックしてしまいます)
マイナンバーカードでパスワードレスでSSHサーバにログイン完了
やってみての感想
マイナンバーカードでSSH認証はできましたが、あえてマイナンバーカードを使うようなケースは個人的にはあまり思い浮かびません。マイナンバーカードを使い慣れるためにやってみるというのもありだと思います。今回何度もやっているうちにマイナンバーカードに使い慣れたような気がします。