Connexion Windows avec authentification par carte à puce PIV#

Ce document explique comment provisionner manuellement la fonction PIV d’une carte à puce Nitrokey 3 pour Windows à l’aide d’une clé et d’un certificat.

À l’avenir, ce provisionnement manuel pourra être automatisé au moyen d’un mini-pilote Windows.

Avertissement

La fonction PIV de la Nitrokey 3 est actuellement considérée comme instable et n’est pas disponible dans les versions stables du micrologiciel. Pour obtenir cette fonctionnalité, il est nécessaire d’installer un micrologiciel de test. Les mises à jour ultérieures du micrologiciel peuvent entraîner la perte de données et de clés cryptographiques. Veuillez consulter la documentation sur la mise à jour du micrologiciel pour plus d’informations.

Conditions préalables#

  • Un serveur Windows avec :

    • Active Directory (instructions)

    • Une autorité de certification (CA), avec un modèle de certificat pour l’authentification de la connexion à l’aide de clés RSA 2048 bits :

  • Une machine utilisateur Windows reliée au domaine du serveur

  • Un Nitrokey 3 avec PIV

  • Un système Linux avec pivy et PCSCD installé (sudo apt install pcscd), pour approvisionner la Nitrokey (étapes 1, 2 et 4). Au lieu d’un système Linux séparé, vous pouvez installer WSL sur Windows. Notez que vous devez virtuellement attacher la Nitrokey à WSL et démarrer PCSCD (sudo service start pcscd) avant d’utiliser pivy.

1 : Générer une clé sur le Nitrokey#

La clé est générée dans l’emplacement 9A (authentification).

pivy-tool -a rsa2048 generate 9A

Note

Si la clé d’administration n’est pas celle par défaut, elle peut être spécifiée avec -A 3des -K 010203040506070801020304050607080102030405060708 . L’argument de -A peut également être aes256, et l’argument de -K est la clé en hexadécimal.

Le code PIN de l’utilisateur peut également être spécifié avec -P 123456, ou -P <value> s’il ne s’agit pas de la valeur par défaut. Si -P n’est pas fourni, il sera demandé après la génération de la clé.

Ceci s’applique à toutes les commandes pivy-tool.

Cette étape peut prendre quelques minutes pour les clés RSA, car l’implémentation purement logicielle est lente.

Résultat attendu:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKO5ENwrK3qKBAgDkyq1tfiw5JxnoCEIiM3Vc+8Eylux04r1sgjHEyqbOvpScObZuchxFZZ5LdeHynvFn3c07K4HpoZ/7NjLzUYOmlVAy4wpEwRs9psbrT6wbvHVLyffZiiSPW15HHQKcUZZ30WDunh5m7xzvY9ej810QIW/P724MFWTbRdpqmG8m1qWCUM5dqkmpiprI/WeD+VmTcQWbJJ+oyoPyxmwzGyAotl7mVC6EYdcfvyBSNQdVdGfYGxjNEec4aWxoFRg4ADfpPnYD+gLxHcj/9s7o/wdMhXRiSio1tjsEjaeuOICGLaiiLGMfLxpfEApb8qJgsEFgYl6kn PIV_slot_9A@9E424375A38449E59B3DF89D9B90E601

2 : Générer une demande de signature de certificat (CSR)#

Cette étape génère un certificat pour la clé dans le slot d’authentification. pivy-tool -n 'Nitro Test' -u "nitro@test.nitrokey.com" -T user-auth req-cert 9A

Le nom d’utilisateur Nitro Test et l’adresse électronique nitro@test.nitrokey.com doivent être remplacés par leurs propres valeurs.

Résultat attendu :

-----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-----

Copier la demande de signature du certificat dans un fichier request.csr

3 : Signer le CSR#

Déplacez le fichier request.csr de l’étape précédente sur le serveur qui héberge l’autorité de certification. Vérifiez dans la console du modèle de certificat (certtmpl.msc ) que le modèle pour les utilisateurs peut accepter les noms d’objet de la demande :

Dans la console du modèle de certificat, dans le paramètre du modèle de certificat d'authentification, cochez "supply in request" dans l'onglet "subject name".

Ouvrez PowerShell et signez la demande de signature du certificat avec certreq.exe -attrib CertificateTemplate:Nitrotest -submit request.csr

Cela ouvrira une interface graphique dans laquelle vous pourrez sélectionner l’autorité de certification correcte s’il y en a plusieurs sur ce serveur. Enregistrez le certificat sous certificate.crt

4 : Stocker le certificat sur la Nitrokey#

cat certificate.der | pivy-tool write-cert 9A

5 : Importer le certificat dans le compte de l’utilisateur#

Déplacez certificate.der sur le périphérique Windows de l’utilisateur et ouvrez le gestionnaire de certificats (Pour l’utilisateur, pas pour la machine) :

Ouvrez le "panneau de contrôle de gestion des certificats d'utilisateur"

Importer le certificat :

Dans les actions, toutes les tâches, vous pouvez trouver l'action d'importation

Une fois cette opération effectuée, déconnectez-vous. Connectez-vous avec la clé Nitrokey en utilisant les « options de connexion ».