Authentification à deux facteurs sur le site à l'aide d'un token USB. Maintenant aussi pour Linux

Authentification à deux facteurs sur le site à l'aide d'un token USB. Maintenant aussi pour Linux
В un de nos articles précédents nous avons parlé de l'importance de l'authentification à deux facteurs sur les portails d'entreprise des entreprises. La dernière fois, nous avons montré comment configurer une authentification sécurisée sur le serveur Web IIS.

Dans les commentaires, il nous a été demandé d'écrire des instructions pour les serveurs Web les plus courants pour Linux - nginx et Apache.

Vous avez demandé – nous avons écrit.

De quoi avez-vous besoin pour commencer ?

  • Toute distribution Linux moderne. J'ai fait une configuration de test sur MX Linux 18.2_x64. Il ne s'agit bien sûr pas d'une distribution serveur, mais il est peu probable qu'il y ait de différences pour Debian. Pour les autres distributions, les chemins d'accès aux bibliothèques de configuration peuvent varier légèrement.
  • Jeton. Nous continuons à utiliser le modèle Rutoken EDS PKI, ce qui est idéal en termes de caractéristiques de vitesse pour une utilisation en entreprise.
  • Pour travailler avec un jeton sous Linux, vous devez installer les packages suivants :
    libccid libpcsclite1 pcscd pcsc-tools opensc

Authentification à deux facteurs sur le site à l'aide d'un token USB. Maintenant aussi pour Linux

Délivrance de certificats

Dans les articles précédents, nous nous sommes appuyés sur le fait que les certificats serveur et client seront émis à l'aide de Microsoft CA. Mais puisque nous configurons tout sous Linux, nous vous parlerons également d'une manière alternative d'émettre ces certificats - sans quitter Linux.
Nous utiliserons XCA comme CA (https://hohnstaedt.de/xca/), disponible sur n'importe quelle distribution Linux moderne. Toutes les actions que nous effectuerons dans XCA peuvent être effectuées en mode ligne de commande à l'aide des utilitaires OpenSSL et pkcs11-tool, mais pour plus de simplicité et de clarté, nous ne les présenterons pas dans cet article.

Mise en route

  1. Installer:
    $ apt-get install xca
  2. Et nous courons :
    $ xca
  3. Nous créons notre base de données pour CA - /root/CA.xdb
    Nous vous recommandons de stocker la base de données de l'autorité de certification dans un dossier auquel seul l'administrateur a accès. Ceci est important pour protéger les clés privées des certificats racines, qui sont utilisées pour signer tous les autres certificats.

Créer des clés et un certificat CA racine

Une infrastructure à clé publique (PKI) repose sur un système hiérarchique. L'élément principal de ce système est l'autorité de certification racine ou CA racine. Son certificat doit être créé au préalable.

  1. Nous créons une clé privée RSA-2048 pour l'autorité de certification. Pour cela, sur l'onglet Clés privées pousser Nouvelle clé et sélectionnez le type approprié.
  2. Définissez un nom pour la nouvelle paire de clés. Je l'ai appelé CA Key.
  3. Nous émettons le certificat CA lui-même, en utilisant la paire de clés créée. Pour cela, rendez-vous dans l'onglet Certificats et appuyez sur Nouveau certificat.
  4. Assurez-vous de choisir SHA-256, car l’utilisation de SHA-1 ne peut plus être considérée comme sûre.
  5. Assurez-vous de choisir comme modèle [par défaut]CA. N'oubliez pas de cliquer sur Appliquer tout, sinon le modèle n'est pas appliqué.
  6. patte Sujet choisissez notre paire de clés. Là, vous pouvez remplir tous les champs principaux du certificat.

Authentification à deux facteurs sur le site à l'aide d'un token USB. Maintenant aussi pour Linux

Création de clés et d'un certificat de serveur https

  1. De la même manière, nous créons une clé privée RSA-2048 pour le serveur, je l'ai appelée Server Key.
  2. Lors de la création d'un certificat, nous sélectionnons que le certificat du serveur doit être signé avec un certificat CA.
  3. N'oubliez pas de sélectionner SHA-256.
  4. Nous choisissons comme modèle [par défaut] Serveur_HTTPS. Cliquer sur Appliquer tout.
  5. Puis sur l'onglet Sujet sélectionnez notre clé et remplissez les champs obligatoires.

Authentification à deux facteurs sur le site à l'aide d'un token USB. Maintenant aussi pour Linux

Créer des clés et un certificat pour l'utilisateur

  1. La clé privée de l'utilisateur sera stockée sur notre token. Pour travailler avec, vous devez installer la bibliothèque PKCS#11 depuis notre site Web. Pour les distributions populaires, nous distribuons des packages prêts à l'emploi, qui se trouvent ici - https://www.rutoken.ru/support/download/pkcs/. Nous avons également des assemblys pour arm64, armv7el, armv7hf, e2k, mipso32el, qui peuvent être téléchargés depuis notre SDK - https://www.rutoken.ru/developers/sdk/. En plus des assemblys pour Linux, il existe également des assemblys pour macOS, freebsd et Android.
  2. Ajout d'un nouveau fournisseur PKCS#11 à XCA. Pour cela, allez dans le menu Options à l'onglet Fournisseur PKCS#11.
  3. ?? Ajouter et sélectionnez le chemin d'accès à la bibliothèque PKCS#11. Dans mon cas, c'est usrliblibrtpkcs11ecp.so.
  4. Nous aurons besoin d’un jeton Rutoken EDS PKI formaté. Téléchargez l'utilitaire rtAdmin - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. Nous réalisons
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-код пользователя>
  6. Nous sélectionnons la clé RSA-2048 pour la PKI Rutoken EDS comme type de clé. J'ai appelé cette clé Clé Client.

    Authentification à deux facteurs sur le site à l'aide d'un token USB. Maintenant aussi pour Linux

  7. Entrez le code PIN. Et nous attendons la fin de la génération matérielle de la bi-clé

    Authentification à deux facteurs sur le site à l'aide d'un token USB. Maintenant aussi pour Linux

  8. Nous créons un certificat pour l'utilisateur par analogie avec le certificat du serveur. Cette fois, nous sélectionnons un modèle [par défaut] HTTPS_client et n'oublie pas de cliquer Appliquer tout.
  9. patte Sujet saisir des informations sur l'utilisateur. Nous répondons par l'affirmative à la demande de sauvegarde du certificat du token.

En conséquence, sur l'onglet Certificats dans XCA, vous devriez obtenir quelque chose comme ça.

Authentification à deux facteurs sur le site à l'aide d'un token USB. Maintenant aussi pour Linux
Cet ensemble minimum de clés et de certificats est suffisant pour commencer à configurer les serveurs eux-mêmes.

Pour configurer, nous devons exporter le certificat CA, le certificat du serveur et la clé privée du serveur.

Pour ce faire, sélectionnez l'entrée souhaitée dans l'onglet correspondant dans XCA et cliquez sur Exportations.

Nginx

Je n'écrirai pas sur la façon d'installer et d'exécuter un serveur nginx - il existe suffisamment d'articles sur ce sujet sur Internet, sans parler de la documentation officielle. Passons directement à la configuration du HTTPS et de l'authentification à deux facteurs à l'aide d'un jeton.

Ajoutez les lignes suivantes à la section serveur dans nginx.conf :

server {
	listen 443 ssl;
	ssl_verify_depth 1;
	ssl_certificate /etc/nginx/Server.crt;
	ssl_certificate_key /etc/nginx/ServerKey.pem;
	ssl_client_certificate /etc/nginx/CA.crt;
	ssl_verify_client on;
}

Une description détaillée de tous les paramètres liés à la configuration de SSL dans nginx peut être trouvée ici - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Je vais juste décrire brièvement celles que je me suis posées :

  • ssl_verify_client - spécifie que la chaîne de confiance pour le certificat doit être vérifiée.
  • ssl_verify_degree - Définit la profondeur de recherche pour le certificat racine approuvé dans la chaîne. Puisque notre certificat client est immédiatement signé sur le certificat racine, la profondeur est définie sur 1. Si le certificat utilisateur est signé sur une autorité de certification intermédiaire, alors 2 doit être spécifié dans ce paramètre, et ainsi de suite.
  • ssl_client_certificate - spécifie le chemin d'accès au certificat racine de confiance, qui est utilisé lors de la vérification de la confiance dans le certificat de l'utilisateur.
  • ssl_certificate/ssl_certificate_key - indiquez le chemin d'accès au certificat/clé privée du serveur.

N'oubliez pas de lancer nginx -t pour vérifier qu'il n'y a pas de fautes de frappe dans la configuration, que tous les fichiers sont au bon endroit, etc.

Et c'est tout! Comme vous pouvez le constater, la configuration est très simple.

Vérifier que cela fonctionne dans Firefox

Puisque nous faisons tout entièrement sous Linux, nous supposerons que nos utilisateurs travaillent également sous Linux (s'ils ont Windows, alors voir les instructions de configuration des navigateurs dans l'article précédent.

  1. Lançons Firefox.
  2. Essayons d'abord de nous connecter sans jeton. On obtient cette image :

    Authentification à deux facteurs sur le site à l'aide d'un token USB. Maintenant aussi pour Linux

  3. Aller à à propos de: preferences # privacy, et nous allons à Dispositif de securité…
  4. ?? Chargepour ajouter un nouveau pilote de périphérique PKCS#11 et spécifier le chemin d'accès à notre librtpkcs11ecp.so.
  5. Pour vérifier que le certificat est visible, vous pouvez vous rendre sur Gestionnaire de certificats. Vous serez invité à saisir votre code PIN. Après une saisie correcte, vous pouvez vérifier ce qu'il y a sur l'onglet Vos certificats notre certificat du jeton est apparu.
  6. Passons maintenant au jeton. Firefox vous invite à sélectionner un certificat qui sera sélectionné pour le serveur. Choisissez notre certificat.

    Authentification à deux facteurs sur le site à l'aide d'un token USB. Maintenant aussi pour Linux

  7. PROFIT!

    Authentification à deux facteurs sur le site à l'aide d'un token USB. Maintenant aussi pour Linux

La configuration se fait une seule fois, et comme vous pouvez le voir dans la fenêtre de demande de certificat, nous pouvons sauvegarder notre sélection. Ensuite, chaque fois que nous nous connecterons au portail, il nous suffira d'insérer un jeton et de saisir le code PIN utilisateur spécifié lors du formatage. Après une telle authentification, le serveur sait déjà quel utilisateur s'est connecté et vous ne pouvez plus créer de fenêtres de vérification supplémentaires, mais laisser immédiatement l'utilisateur accéder à son compte personnel.

Apache

Tout comme avec nginx, personne ne devrait avoir de problèmes pour installer Apache. Si vous ne savez pas comment installer ce serveur Web, utilisez simplement la documentation officielle.

Et nous commençons à mettre en place notre HTTPS et notre authentification à deux facteurs :

  1. Vous devez d'abord activer mod_ssl :
    $ a2enmod ssl
  2. Et puis activez les paramètres HTTPS par défaut du site :
    $ a2ensite default-ssl
  3. Maintenant, nous éditons le fichier de configuration : /etc/apache2/sites-enabled/default-ssl.conf :
        SSLEngine on
        SSLProtocol all -SSLv2
    
        SSLCertificateFile	/etc/apache2/sites-enabled/Server.crt
        SSLCertificateKeyFile /etc/apache2/sites-enabled/ServerKey.pem
    
        SSLCACertificateFile /etc/apache2/sites-enabled/CA.crt
    
        SSLVerifyClient require
        SSLVerifyDepth  10

    Comme vous pouvez le voir, les noms des paramètres coïncident pratiquement avec les noms des paramètres dans nginx, je ne les expliquerai donc pas. Encore une fois, toute personne intéressée par les détails est la bienvenue dans la documentation.
    Maintenant, nous redémarrons notre serveur :

    $ service apache2 reload
    $ service apache2 restart

  4. Comme vous pouvez le constater, la configuration de l'authentification à deux facteurs sur n'importe quel serveur Web, que ce soit sous Windows ou Linux, prend une heure maximum. Et la configuration des navigateurs prend environ 5 minutes. Beaucoup de gens pensent que mettre en place et utiliser l’authentification à deux facteurs est difficile et peu clair. J'espère que notre article démystifiera ce mythe, au moins un peu.

Seuls les utilisateurs enregistrés peuvent participer à l'enquête. se connecters'il te plait.

Avez-vous besoin d'instructions pour configurer TLS avec des certificats selon GOST 34.10-2012 :

  • Oui, TLS-GOST est très nécessaire

  • Non, le réglage avec les algorithmes GOST n'est pas intéressant

44 utilisateurs ont voté. 9 utilisateurs se sont abstenus.

Source: habr.com

Ajouter un commentaire