ProHoster > Blog > administration > 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
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
Installer:
$ apt-get install xca
Et nous courons :
$ xca
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.
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é.
Définissez un nom pour la nouvelle paire de clés. Je l'ai appelé CA Key.
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.
Assurez-vous de choisir SHA-256, car l’utilisation de SHA-1 ne peut plus être considérée comme sûre.
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é.
patte Sujet choisissez notre paire de clés. Là, vous pouvez remplir tous les champs principaux du certificat.
Création de clés et d'un certificat de serveur https
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.
Lors de la création d'un certificat, nous sélectionnons que le certificat du serveur doit être signé avec un certificat CA.
N'oubliez pas de sélectionner SHA-256.
Nous choisissons comme modèle [par défaut] Serveur_HTTPS. Cliquer sur Appliquer tout.
Puis sur l'onglet Sujet sélectionnez notre clé et remplissez les champs obligatoires.
Créer des clés et un certificat pour l'utilisateur
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.
Ajout d'un nouveau fournisseur PKCS#11 à XCA. Pour cela, allez dans le menu Options à l'onglet Fournisseur PKCS#11.
?? Ajouter et sélectionnez le chemin d'accès à la bibliothèque PKCS#11. Dans mon cas, c'est usrliblibrtpkcs11ecp.so.
Nous sélectionnons la clé RSA-2048 pour la PKI Rutoken EDS comme type de clé. J'ai appelé cette clé Clé Client.
Entrez le code PIN. Et nous attendons la fin de la génération matérielle de la bi-clé
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.
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.
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 :
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.
Essayons d'abord de nous connecter sans jeton. On obtient cette image :
Aller à à propos de: preferences # privacy, et nous allons à Dispositif de securité…
?? Chargepour ajouter un nouveau pilote de périphérique PKCS#11 et spécifier le chemin d'accès à notre librtpkcs11ecp.so.
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.
Passons maintenant au jeton. Firefox vous invite à sélectionner un certificat qui sera sélectionné pour le serveur. Choisissez notre certificat.
PROFIT!
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 :
Vous devez d'abord activer mod_ssl :
$ a2enmod ssl
Et puis activez les paramètres HTTPS par défaut du site :
$ a2ensite default-ssl
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
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.