PIV Smartcard認証によるWindowsログイン。#
本書は、Nitrokey 3 for Windows のスマートカードログオンの PIV 機能を、鍵と証明書を用いて手動でプロビジョニングする方法について説明します。
将来的には、この手動プロビジョニングをWindowsのMiniDriverで自動化することも可能です。
前提条件#
持つWindowsサーバー:
Active Directory (`指示<https://serverspace.io/support/help/installing-active-directory-on-windows-server-2019/>`__)
認証局(CA)で、RSA2048ビット鍵を使用したログオン認証用の証明書テンプレートがあります:
サーバーのドメインに参加しているWindowsユーザーマシン
A Nitrokey 3 with`PIV<https://github.com/Nitrokey/piv-authenticator>`__。
`pivy<https://github.com/arekinath/pivy>`__ と PCSCD をインストールした Linux システム(
sudo apt install pcscd
)で、Nitrokey をプロビジョニングします(ステップ 1、2、4)。別の Linux システムの代わりに、`Windows に WSL<https://learn.microsoft.com/en-us/windows/wsl/install>`__ をインストールすることができます。なお、pivy を使用する前に、`仮想的に<https://devblogs.microsoft.com/commandline/connecting-usb-devices-to-wsl/>`__ Nitrokey を WSL に接続し、PCSCD を起動する必要があります (sudo service start pcscd
)。
1:Nitrokeyでキーを生成する。#
鍵はスロット9Aで生成されます(認証)。
pivy-tool generate 9A -a rsa2048
注釈
管理キーがデフォルトのものでない場合は、-A 3des -K 010203040506070801020304050607080102030405060708
で指定できる。-A
の引数には``aes256`` を指定することもでき、-K
の引数には16進数でキーを指定する。
ユーザーPINは、-P 123456
、デフォルトでない場合は``-P <value>``で指定することも可能です。``-P``が提供されない場合、鍵生成後に要求されます。
これは、すべての``pivy-tool`` コマンドに適用されます。
RSA鍵の場合、純粋なソフトウェアの実装が遅いため、このステップに数分かかることがあります。
期待される出力 :
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKO5ENwrK3qKBAgDkyq1tfiw5JxnoCEIiM3Vc+8Eylux04r1sgjHEyqbOvpScObZuchxFZZ5LdeHynvFn3c07K4HpoZ/7NjLzUYOmlVAy4wpEwRs9psbrT6wbvHVLyffZiiSPW15HHQKcUZZ30WDunh5m7xzvY9ej810QIW/P724MFWTbRdpqmG8m1qWCUM5dqkmpiprI/WeD+VmTcQWbJJ+oyoPyxmwzGyAotl7mVC6EYdcfvyBSNQdVdGfYGxjNEec4aWxoFRg4ADfpPnYD+gLxHcj/9s7o/wdMhXRiSio1tjsEjaeuOICGLaiiLGMfLxpfEApb8qJgsEFgYl6kn PIV_slot_9A@9E424375A38449E59B3DF89D9B90E601
2: CSR(Certificate Signing Request)の生成#
このステップでは、認証スロットの鍵の証明書を生成します。pivy-tool req-cert 9A -n 'Nitro Test' -u "nitro@test.nitrokey.com" -T user-auth
``Nitro Test``のユーザー名と``nitro@test.nitrokey.com``のメールアドレスは、独自の値に変更する必要があります。
期待される出力
-----BEGIN CERTIFICATE REQUEST-----
MIIC4DCCAcgCAQEwFTETMBEGA1UEAwwKTml0cm8gVGVzdDCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAMo7kQ3CsreooECAOTKrW1+LDknGegIQiIzdVz7w
TKW7HTivWyCMcTKps6+lJw5tm5yHEVlnkt14fKe8WfdzTsrgemhn/s2MvNRg6aVU
DLjCkTBGz2mxutPrBu8dUvJ99mKJI9bXkcdApxRlnfRYO6eHmbvHO9j16PzXRAhb
8/vbgwVZNtF2mqYbybWpYJQzl2qSamKmsj9Z4P5WZNxBZskn6jKg/LGbDMbICi2X
uZULoRh1x+/IFI1B1V0Z9gbGM0R5zhpbGgVGDgAN+k+dgP6AvEdyP/2zuj/B0yFd
GJKKjW2OwSNp644gIYtqKIsYx8vGl8QClvyomCwQWBiXqScCAwEAAaCBhTCBggYJ
KoZIhvcNAQkOMXUwczAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIGwDAfBgNV
HSUEGDAWBggrBgEFBQcDAgYKKwYBBAGCNxQCAjAyBgNVHREEKzApoCcGCisGAQQB
gjcUAgOgGQwXbml0cm9AdGVzdC5uaXRyb2tleS5jb20wDQYJKoZIhvcNAQELBQAD
ggEBAH6XBlBmc7dQP0mt7uXOyIu8xRSYSfxKBJGjPl0IKDHWke3/4frU5C99/KS/
b9/T4JrlZa/9letjMj8hV4a+pdE0Gpxy+Ac1a9XlMki35UESOXC0JSyirBBLnNtD
qtHKtfPeQ3Csbsj57qjdqBMlWII5cz3jO9EpEG2FgxreJwY5s58KuKit01AJDIWt
GYg9P7MblEEO8iPjcFqccsPTRgU04COT6dOFZ8bGZ18UsnAVMXPOdcR7cppp8mL+
QZCyqdk1m+91rtkJPkqVUK/0o8MJj5k3Ch4ANvQEWnOabRumJaHDu4PmhsqLnQJA
eGQvuPRBmR71GRkGmqu+e1oyze8=
-----END CERTIFICATE REQUEST-----
証明書署名要求をファイル``request.csr`` にコピーします。
3: CSRに署名する#
前のステップで作成したrequest.csrファイルを、認証局をホストするサーバーに移動します。証明書テンプレートコンソール(certtmpl.msc
)で、ユーザー用のテンプレートがリクエストからサブジェクト名を受け入れることができることを確認します:

PowerShellを開き、証明書署名リクエストに``certreq.exe -attrib CertificateTemplate:Nitrotest -submit request.csr`` で署名します。
このサーバーに複数の認証局がある場合、正しい認証局を選択するためのGUIが表示されます。証明書を``certificate.crt`` として保存します。
4:証明書をNitrokeyに保存する#
cat certificate.der | pivy-tool write-cert 9A
5:ユーザーアカウントに証明書をインポートする#
``certificate.der``をユーザーのWindowsデバイスに移動し、証明書マネージャを開く(ユーザー用、マシン用ではない ):

証明書をインポートする:

これが完了したら、ログアウトします。"サインインオプション "を使ってNitrokeyでログインします。