YubiKey Minidriver

実は、Windows 10 v1803 から YubiKey Minidriver が標準で入っており、ドライバを入れずに YubiKey の PIV フル機能、

つまり

  • 複数の証明書の利用
  • Windows標準のパスワード変更画面でのPIN変更
  • PIN Block の解除?
  • ADCS証明書の発行
  • SmartCard 利用時の Touch Policy の設定
  • Certificate Chain のインポート

などができるようになる。

ドライバは Smart Card Drivers and Tools | Yubico からもダウンロードできるので Windows7 以降であれば利用可能。

さて、ドライバをインストールすれば、デバイスマネージャーで YubiKey SmartCard として、認識されているはず。

さっそく CNG 経由で YubiKey を触ってみる。

PKCS#12 の証明書を作成

Windows で証明書を扱うときは、そう pkcs#12 の pfx ファイル。
いつも作り方を忘れる PKCS#12 の秘密鍵&証明書のパックを作る

ADCSを持ってる人は Yubico のガイド なんかを参考にどうぞ
YubiKey の中でキージェネレーション等もできます。

今回は openssl で作成してインポートする。


# SHA256 RSA 2048bit の証明書・秘密鍵を作成
openssl req -newkey rsa:2048 -sha256 -nodes -keyout private.key -x509 -days 365 -out public.pem -subj "/C=JP/ST=Kanagawa/L=Kawasaki/O=Enjoy Struggling/CN=YOURDOMAIN.EXAMPLE"

# PKCS#12 に変換
openssl pkcs12 -export -inkey private.key -in public.pem -out pkcs12.pfx
Enter Export Password: # Keyを保護するパスワード
Verifying - Enter Export Password: # 再入力

YubiKey にインポート

PKCS#12 のキーを Microsoft Base Smart Card Crypto Provider 経由でインポートする。

キーのインポートは管理者権限がいるらしく(なんでや)、管理者権限で以下のコマンドを実行する。


certutil –csp "Microsoft Base Smart Card Crypto Provider" –importpfx pkcs12.pfx

PINの入力画面が表示され、インポートした証明書が、Active Directory のユーザ証明書なんかであればそのまま Windows のログイン等に使える。
複数回インポートすると 9a, 9c… と順に利用される(上書きはされない)

インポートするだけだったら、yubico-piv-tool でインポートするのと変わらない。


yubico-piv-tool -s9c -i pkcs12.pfx -KPKCS12 -a set-chuid -a import-key -a import-cert

この場合、Certificate を別途 Windows 証明書サービスにインストールする必要がある。

ところで、minidriver と yubico-piv-tool を同時に使ってはいけない
特に、 yubico-piv-tool で証明書をインポートした後に、minidriver 経由でインポートすると、警告もなくスロットが上書きされてしまう

…と、昔は思ってたが、今試してみるとそんなことはなかった

CNG経由で証明書を利用する

さて、インポートしたキーは何かしらに使える。CNG経由で利用するアプリケーションといえば、VPN や ダイアルアップの認証だが
残念ながら、証明書を使えるVPNサーバー等を持っていないので前回同様 putty-cac を利用する。

CAPI を選んで…

YubiKey に格納した証明書を選んで…

copy to clipiboard で公開鍵をコピーする。

今回はこんな感じの Vagrantfile を作成してテストした。


# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.box_check_update = false
  config.vm.provision "shell", inline: <<-SHELL
    echo "PASTE YOUR PUBLICKEY HERE" >> /home/vagrant/.ssh/authorized_keys
  SHELL
end

vagrant up とすれば、通常はVMの SSHポートが ホストの 2222 ポートにフォワーディングされるので localhost:2222 に接続できるかを試す。

OpenSC の dll を使った場合とは異なり、Windows標準な感じのPINを入れる画面が出てくる。

これは結構素敵。