ググると古い話も出てくるのでまとめる。YubiKey 5 NFC USA-Aしか持っていないのでその他の話はしない。以下、単に「YubiKey 5」と呼ぶ。
前置き
- YubiKey 5には4つのスロットがあり、4種類の秘密鍵を登録できる
- YubiKey Managerで秘密鍵の生成、自己署名証明書の生成までが数クリックでできる
- このやり方だと秘密鍵そのものには一切触れられない。手に入るのは証明書と公開鍵だけ
- 秘密鍵そのものが必要な場合(バックアップを取りたい、パスフレーズを設定したいなど)は自前で作った鍵をインポートする必要がある
YubiKey Managerインストール&初期設定
- 公式からYubiKey Managerを普通に落としてきてインストールする
- しばらく認識しなかったが、YubiKey Personalization Toolsをあれこれ触っていたら認識するようになった
- トップメニューから Applications > PIV と進み、まずはPINコードの設定を済ませる
- Management Keyも生成して保存しておく
(1) YubiKey Managerで全部やる場合
秘密鍵生成
- 次いでCertificatesへと進む。4つのスロットがある
- Authentication (Slot 9a)
- Digital Sinagure (Slot 9c)
- Key Management (Slot 9d)
- Card Authentication (Slot 9e)
- 好きなものを選び、Generateボタンを押す
- CSRを貰っても仕方がないのでSelf-signed certificateを選択する
- アルゴリズムを選択する。スタンダードなRSA2048で良い気がする
- YubiKey 4ではRSA 4096ビットの鍵がインポートできたという話があるが、YubiKey 5では無理っぽい
- 名前(Common Name)、証明書の有効期限を設定するとGenerateで秘密鍵が生成される
証明書エクスポート
- Exportボタンで証明書が書き出せる
- 書き出せるのは証明書だけで秘密鍵には一切手を出せない
証明書から公開鍵を取り出す
- 証明書には公開鍵が含まれている。opensslコマンドでPEM形式の公開鍵が取り出せる
openssl x509 -in hoge.crt -pubkey -noout > hoge.pem
- PEM形式の公開鍵を(GitHubで使えるような)OpenSSH形式に変換する
ssh-keygen -i -f hoge.pem -m pkcs8 > hoge.pub
これでGitHubの管理ページにも登録できる。秘密鍵が手元にないので微妙と言えば微妙。
(2) 秘密鍵を自分で生成する場合
秘密鍵&公開鍵を作る
- puttyやssh-keygenでキーを作る
- パスフレーズを設定することが望ましいことは分かっているがユーザー体験が著しく悪化するので微妙
- RSA 4096ビットの鍵はインポートできなかった
ssh-keygen -t rsa -b 2048 -C "someone@example.com" -m pem -f ./id_rsa
自己署名する
- CSRを作る
- 対話式で色々聞かれる。自分しか使わないとはいえ後で困らないようにある程度ちゃんと書いておいた方が良さげ
- 特にCommon NameはYubiKey Managerの画面上でも表示されるので見分けが付くようにしておく
openssl req -new -key id_rsa > id.csr
- 自己署名し、秘密鍵とセットにしてPKCS#12形式に変換する
- 有効期間はご自由に
openssl x509 -days 3650 -req -signkey id_rsa < id.csr > id.crt
openssl pkcs12 -export -inkey id_rsa -in id.crt -out id.pfx
インポート
- YubiKey Managerから適当なスロットを選んでImportをクリック
- 作成したpfxファイルをインポートする
使い方
ここは他の記事でも解説されているので割愛。