YubiKey Managerを使用した鍵ペア(秘密鍵)と自己署名証明書の作成方法

YubiKey Managerは下記URLからインストールできます。
https://www.yubico.com/products/services-software/download/smart-card-drivers-tools/

  1. YubiKey Managerを開き、「Applications >> PIV」をクリックします
  2. 「Configure Certificates」をクリックします
  3. 秘密鍵を作成するスロットのタブの右下の「Generate」をクリックします

    ※この記事では「Authentication(Slot 9a)」に秘密鍵を作成します

  4. 「Self-signed certificate」を選択して「Next」をクリックします
  5. Algorithmを「RSA2048」を選択して「Next」をクリックします
  1. 鍵の名前を入力して「Next」をクリックします

    例) yamadatarou

  2. 鍵の有効期限を選択して「Next」をクリックします
  3. 設定した内容に間違いがないか確認したら「Generate」をクリックします
  4. 設定してあるManagement Keyを入力します

    PINも同様に入力します

  5. 以上で秘密鍵の入った自己証明書の作成は完了です。

ykmanコマンドを使用した鍵ペア(秘密鍵)と自己署名証明書の作成方法

①コマンドラインツールをインストールします

Mac

ターミナルを開いて、「brew install ykman」と入力するとコマンドラインツールがインストールされてコマンドラインでYubiKeyの設定を行えるようになります。

Windows

Windows環境では、YubiKey Managerをインストールすると、一緒にコマンドラインツールもインストールされています。Windowsのコマンド環境を管理者として開いて、C:\Program Files\Yubico\YubiKey Manager> にディレクトリを移動することでコマンドラインでYubiKeyの設定を行えます。

②鍵ペア(秘密鍵と公開鍵)の生成をします

$ ykman piv generate-key -P123456 -
m010203040506070801020304050607080102030405060708 9a yamadatarou

<動作結果表示なし>
(例:Management Keyを「010203040506070801020304050607080102030405060708」、PINを「123456」に設定していたときに、「スロット9a」に「yamadatarou」という名前の鍵ペアを生成)

③自己署名証明書の生成をします

$ ykman piv generate-certificate -P123456 -
m010203040506070801020304050607080102030405060708 -s "yamadatarou" 9a
yamadatarou

<動作結果表示なし>
(例:Management Keyを「010203040506070801020304050607080102030405060708」、PINを「123456」に設定していたときに、Subject nameが「yamadatarou」で「スロット9a」に「yamadatarou」という名前の鍵ペアをもつ自己証明書を生成)

※証明書の有効期限(デフォルト365日後まで)を変えたい場合はオプションで「-d」を加えることで変更できます。
(例:証明書の有効期限を400日後に設定)

$ ykman piv generate-certificate -P123456 -
m010203040506070801020304050607080102030405060708 -d400 -s "yamadatarou" 9a
yamadatarou

以上で鍵ペア(秘密鍵と公開鍵)と自己署名証明書の作成は完了です。

公開鍵の入った自己署名証明書の情報はykmanコマンドでも確認できます。

$ ykman piv info
PIV version: 5.2.7
PIN tries remaining: 3
CHUID:
3019d4e739da739ced39ce739d836858210842108421c84210c3eb3410170452da7c41e01c578
8e7f6effcad7f350832303330303130313e00fe00
CCC: No data available.
Slot 9a:
Algorithm: RSA2048
Subject DN: CN=yamadatarou
Issuer DN: CN=yamadatarou
Serial: 355906469862366400514395928992499109154174450941
Not before: 2021-02-02 02:58:39
Not after: 2022-02-02 02:58:39

Algorithmはデフォルトで「RSA2048」になっています。
証明書の有効期限はデフォルトで「365日」になっています。

YubiKey内の秘密鍵でSSHログイン接続方法

YubiKey内の秘密鍵を利用してリモートサーバーにSSH接続する手順です。

検証環境

  • YubiKeyはYubiKey 5 NFC
  • SSH認証用Linuxサーバー(CentOS7)

OpenSCをインストール

OpenSCをインストールします。

$ brew install opensc

homebrewでインストールすればインストール先は/usr/local/opt/openscになります。

$ brew --prefix opensc 
/usr/local/opt/opensc

でインストール先が確認できます。

公開鍵をサーバーに登録

①OpenSCが正常にインストールされていれば、ローカルで以下のコマンドを実行するとYubiKey内の公開鍵が出力されます

$ ssh-keygen -D /usr/local/opt/opensc/lib/opensc-pkcs11.so
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDFq2+YX0RP93cA9gYXs+0+LVNdQU4epTtzhrVZyl+M
Y0jg1b5kxaIc0wtnpE5Gn0ip96WzeZjWUQP/DXHaylcVGvuFhufQoa6llYiQgwFYlxrcET898Y/Yo2ZB
Q7fdzViEzVFdRYx5XSjPXJNc/oigehZ+Qt3ZPtnDe8+KJl0Ocqv2sIErZl4Pqj58GhHhVkFzuPgtk7sCY
BKDR7FgLK+bUQDSe+pPr56Mq8g3PhVrVm6YQRZBZQv1HiW24ss5dAFlh8B1rvkDVjXLrFN5Uli/W
W8Uq/oxWmaNizrkY3j+t3H4RrMYC0DjV4PkmwWh9DTOsPOTE4eAPIz4cHqqDDzM

②公開鍵をLinuxサーバーに転送する必要があるので、「id_rsa.pub」と名前をつけたファイルに出力します

$ ssh-keygen -D /usr/local/opt/opensc/lib/opensc-pkcs11.so >>id_rsa.pub

<動作結果表示なし>

③出力に使ったファイルをサーバーに転送します

必要要素 項目
SSHサーバー認証用の既存ログイン鍵 SSH_with_YubiKey.pem
YubiKeyから取り出した公開鍵ファイル /Users/yamadatarou/id_rsa.pub
転送したいSSHサーバー内のパス centos@18.480.167.226:~/
$ scp -i SSH_with_YubiKey.pem /Users/yamadatarou/id_rsa.pub centos@18.480.167.226:~/
id_rsa.pub
100% 381 37.8KB/s 00:00

「id_rsa.pub」公開鍵がSSHサーバーに転送されました。

④Linuxサーバーにログインし、利用したい公開鍵を所定のユーザーディレクトリへ書き込みます

$ cat id_rsa.pub >> /home/centos/.ssh/authorized_keys

<動作結果表示なし>

⑤以下のコマンドを実行して公開鍵の内容が出力されていれば、既存の公開鍵の下にサーバーに転送された公開鍵の内容が確認できます

$ cat /home/centos/.ssh/authorized_keys
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDPoh9eleJBCqWD2aQGV1/7Mrov212+5/lRvJwpo6+nV/
MQeiG3H1Cv1dkn2krag+SjxjknPkLd/w9ISvvp07u0X5GW7p1GmfTUZKmEDYs0agzIcWjBkMWfFyp
QTrGRjoc1lKqBqC2sDemYLGjnu+6XVIuiXUgVe7tCPHcImMODbScbB2XcyC9Oh+aBquI9VPnMruar
fTuQcrjm2cZtivLnM5lVDmDEMimOeHMU+xddP4O9PZzu56XTu01CRAmgaeF8+hLNZg6TN2Qof6
vLtRSN7I/b6CZ9KCD9oklh0ZkCHtf+Gqt1BX7nLdewKS7Z6+zgXVttCGhij9l7d7bEMC3Xsa.
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDFq2+YX0RP93cA9gYXs+0+LVNdQU4epTtzhrVZyl+M
Y0jg1b5kxaIc0wtnpE5Gn0ip96WzeZjWUQP/DXHaylcVGvuFhufQoa6llYiQgwFYlxrcET898Y/Yo2ZB
Q7fdzViEzVFdRYx5XSjPXJNc/oigehZ+Qt3ZPtnDe8+KJl0Ocqv2sIErZl4Pqj58GhHhVkFzuPgtk7sCY
BKDR7FgLK+bUQDSe+pPr56Mq8g3PhVrVm6YQRZBZQv1HiW24ss5dAFlh8B1rvkDVjXLrFN5Uli/W
W8Uq/oxWmaNizrkY3j+t3H4RrMYC0DjV4PkmwWh9DTOsPOTE4eAPIz4cHqqDDzM

上半分はSSHサーバー認証用の既存ログイン鍵の内容、下半分はYubiKeyで生成した公開鍵(id_rsa.pub)の内容です。

YubiKey クライアントユーザーでログインする

ローカルで作成したYubiKey内の秘密鍵を利用してSSHログインします。

$ ssh -I /usr/local/opt/opensc/lib/opensc-pkcs11.so ユーザー名@サーバーのIP
Enter PIN for 'yamadatarou(鍵の名前)':

「Enter PIN for 'yamadatarou'」でYubiKeyのPINを入力するとSSHログインが完了します。

YubiKeyの他サポートページについてはこちらをご覧ください