Authentification Ă  deux facteurs sur le site avec l'utilisation d'un jeton USB. Maintenant aussi pour Linux

Authentification Ă  deux facteurs sur le site avec l'utilisation d'un jeton USB. Maintenant aussi pour Linux
Dans dans l'un de nos articles précédents nous avons abordé l'importance de l'authentification à deux facteurs sur les portails d'entreprise. La derniÚre fois, nous avons démontré comment configurer une authentification sécurisée sur le serveur web IIS.

Dans les commentaires, nous avons Ă©tĂ© invitĂ©s Ă  rĂ©diger un guide pour les serveurs web les plus courants sous Linux — nginx et Apache.

Vous avez demandĂ© — nous avons Ă©crit.

Que faut-il pour commencer ?

  • Toute distribution Linux moderne. J'ai effectuĂ© la configuration de test sous MX Linux 18.2_x64. Ce n'est certes pas une distribution serveur, mais il ne devrait pas y avoir de grandes diffĂ©rences pour Debian. Pour d'autres distributions, les chemins vers les bibliothĂšques et les configurations peuvent lĂ©gĂšrement varier.
  • Token. Nous continuons d'utiliser le modĂšle RUTOKEN EDS PKI, qui est parfaitement adaptĂ© en termes de performance pour une utilisation en entreprise.
  • Pour travailler avec le token sous Linux, il est nĂ©cessaire d'installer les paquets suivants :
    libccid libpcsclite1 pcscd pcsc-tools opensc

Authentification Ă  deux facteurs sur le site avec l'utilisation d'un jeton USB. Maintenant aussi pour Linux

Émission des certificats

Dans les articles prĂ©cĂ©dents, nous nous sommes appuyĂ©s sur le fait que les certificats serveur et client seraient Ă©mis via Microsoft CA. Mais puisqu'on configure tout sous Linux, nous allons Ă©galement parler d'un moyen alternatif d'Ă©mettre ces certificats — sans quitter Linux.
Nous utiliserons XCA comme CA (https://hohnstaedt.de/xca/), qui est disponible dans toute distribution Linux moderne. Toutes les actions que nous allons effectuer dans XCA peuvent Ă©galement ĂȘtre rĂ©alisĂ©es en ligne de commande Ă  l'aide des utilitaires OpenSSL et pkcs11-tool, mais pour plus de simplicitĂ© et de clartĂ©, nous ne les mentionnerons pas dans cet article.

Commencer

  1. Installation :
    $ apt-get install xca
  2. Et lançons-le :
    $ xca
  3. CrĂ©ons notre base de donnĂ©es pour le CA — /root/CA.xdb
    Nous recommandons de stocker la base de données de l'autorité de certification dans un dossier accessible uniquement à l'administrateur. C'est important pour protéger les clés privées des certificats racines, qui sont utilisées pour signer tous les autres certificats.

Créons les clés et le certificat CA racine

Au cƓur de l'infrastructure Ă  clĂ© publique (PKI) se trouve un systĂšme hiĂ©rarchique. Le principal de ce systĂšme est le centre de certification racine, ou CA racine. Son certificat doit ĂȘtre créé en premier.

  1. Créons une clé secrÚte RSA-2048 pour le CA. Pour ce faire, dans l'onglet Clés privées cliquez sur Nouvelle clé et choisissez le type correspondant.
  2. Attribuons un nom Ă  la nouvelle paire de clĂ©s. Je l'ai appelĂ©e — ClĂ© CA.
  3. Émettons le certificat CA lui-mĂȘme, en utilisant la paire de clĂ©s créée. Pour cela, passons Ă  l'onglet Certificats et cliquez 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Ă©curisĂ©e.
  5. Comme modÚle, assurez-vous de choisir [default] CA. N'oubliez pas de cliquer sur Appliquer tout, sinon le modÚle ne sera pas appliqué.
  6. Dans l'onglet Objet choisissons notre paire de clés. Vous pouvez également remplir tous les champs principaux du certificat ici.

Authentification Ă  deux facteurs sur le site avec l'utilisation d'un jeton USB. Maintenant aussi pour Linux

Créons les clés et le certificat du serveur HTTPS

  1. De mĂȘme, crĂ©ons une clĂ© privĂ©e RSA-2048 pour le serveur, que j'ai appelĂ©e — ClĂ© serveur.
  2. Lors de la crĂ©ation du certificat, choisissez que le certificat du serveur doit ĂȘtre signĂ© par le certificat CA.
  3. N'oublions pas de choisir SHA-256.
  4. Comme modĂšle, choisissez [default] HTTPS_server. Cliquez sur Appliquer tout.
  5. AprÚs cela, dans l'onglet Objet choisissons notre clé et remplissons les champs nécessaires.

Authentification Ă  deux facteurs sur le site avec l'utilisation d'un jeton USB. Maintenant aussi pour Linux

Créons les clés et le certificat pour l'utilisateur

  1. La clĂ© privĂ©e de l'utilisateur sera stockĂ©e sur notre token. Pour y travailler, il est nĂ©cessaire d'installer la bibliothĂšque PKCS#11 depuis notre site. Pour les distributions populaires, nous distribuons des paquets prĂȘts Ă  l'emploi, qui se trouvent ici — https://www.rutoken.ru/support/download/pkcs/. Nous avons Ă©galement des compilations pour arm64, armv7el, armv7hf, e2k, mipso32el, que l'on peut obtenir dans notre SDK — https://www.rutoken.ru/developers/sdk/. En plus des compilations pour Linux, il existe Ă©galement des compilations pour macOS, FreeBSD et Android.
  2. Ajoutons un nouveau fournisseur PKCS#11 dans XCA. Pour cela, allez dans le menu Options vers l'onglet Fournisseur PKCS#11.
  3. Cliquez sur Ajouter et choisissez le chemin vers la bibliothĂšque PKCS#11. Dans mon cas, c'est usrliblibrtpkcs11ecp.so.
  4. Nous aurons besoin d'un token formatĂ© Rutoken ECP PKI. TĂ©lĂ©chargez l'utilitaire rtAdmin — https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. Nous exécutons
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u 
  6. Comme type de clĂ©, choisissez — clĂ© RSA-2048 sur Rutoken ECP PKI. J'ai appelĂ© cette clĂ© ClĂ© client.

    Authentification Ă  deux facteurs sur le site avec l'utilisation d'un jeton USB. Maintenant aussi pour Linux

  7. Entrez le code PIN. Et attendez la fin de la génération matérielle de la paire de clés.

    Authentification Ă  deux facteurs sur le site avec l'utilisation d'un jeton USB. Maintenant aussi pour Linux

  8. Le certificat pour l'utilisateur est créé de maniÚre similaire au certificat du serveur. Cette fois-ci, choisissez le modÚle [default] HTTPS_client et n'oubliez pas de cliquer sur Appliquer tout.
  9. Dans l'onglet Objet entrez les informations sur l'utilisateur. Répondez par l'affirmative à la demande de sauvegarde du certificat sur le token.

En fin de compte, dans l'onglet Certificats dans XCA, cela devrait ressembler Ă  peu prĂšs Ă  cela.

Authentification Ă  deux facteurs sur le site avec l'utilisation d'un jeton USB. Maintenant aussi pour Linux
Cet ensemble minimal de clés et de certificats est suffisant pour commencer la configuration des serveurs.

Pour la configuration, nous devons exporter le certificat de l'AC, le certificat du serveur et la clé privée du serveur.

Pour cela, il faut sélectionner l'entrée pertinente dans l'onglet correspondant dans XCA et cliquer sur Exporter.

Nginx

Je ne vais pas expliquer comment installer et lancer un serveur nginx, car il existe déjà beaucoup d'articles à ce sujet sur Internet, sans compter la documentation officielle. Passons directement à la configuration de HTTPS et de l'authentification à deux facteurs par jeton.

Ajoutez les lignes suivantes dans la section server de 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;
}

Vous pouvez trouver une description détaillée de tous les paramÚtres concernant la configuration SSL dans nginx ici - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Je vais juste décrire briÚvement ceux que j'ai configurés :

  • ssl_verify_client — indique qu'il est nĂ©cessaire de vĂ©rifier la chaĂźne de confiance pour le certificat.
  • ssl_verify_depth — dĂ©finit la profondeur de recherche du certificat racine de confiance dans la chaĂźne. Comme notre certificat client est directement signĂ© par le certificat racine, la profondeur est donc dĂ©finie Ă  1. Si le certificat utilisateur est signĂ© par un CA intermĂ©diaire, il faut alors indiquer 2 dans ce paramĂštre, et ainsi de suite.
  • ssl_client_certificate — indique le chemin vers le certificat racine de confiance utilisĂ© pour vĂ©rifier la confiance envers le certificat de l'utilisateur.
  • ssl_certificate/ssl_certificate_key — indiquent le chemin vers le certificat/clĂ© privĂ©e du serveur.

N'oubliez pas d'exĂ©cuter nginx -t pour vĂ©rifier qu'il n'y a pas de fautes de frappe dans la configuration, que tous les fichiers se trouvent lĂ  oĂč ils doivent ĂȘtre, etc.

Et voilĂ  ! Comme vous pouvez le voir, la configuration est trĂšs simple.

Vérifions le fonctionnement dans Firefox

Puisque nous faisons tout entiÚrement sous Linux, considérons que nos utilisateurs travaillent également sous Linux (s'ils sont sous Windows, alors regardez le guide de configuration des navigateurs dans l'article précédent.

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

    Authentification Ă  deux facteurs sur le site avec l'utilisation d'un jeton USB. Maintenant aussi pour Linux

  3. AccĂ©dez Ă  about:preferences#privacy, et allez dans PĂ©riphĂ©riques de sĂ©curité 
  4. Cliquez sur Charge, pour ajouter un nouveau pilote de périphérique PKCS#11 et indiquer le chemin vers notre librtpkcs11ecp.so.
  5. Pour vérifier que le certificat est visible, vous pouvez accéder à Gestionnaire de certificats. Une demande de saisie du code PIN s'affichera. AprÚs avoir saisi correctement, vous pourrez vérifier que notre certificat est apparu dans l'onglet Vos certificats sur le jeton.
  6. Maintenant, connectons-nous avec le jeton. Firefox propose de choisir le certificat qui sera sélectionné sur le serveur. Sélectionnons notre certificat.

    Authentification Ă  deux facteurs sur le site avec l'utilisation d'un jeton USB. Maintenant aussi pour Linux

  7. PROFIT!

    Authentification Ă  deux facteurs sur le site avec l'utilisation d'un jeton USB. Maintenant aussi pour Linux

La configuration ne se fait qu'une seule fois, et comme on peut le voir dans la fenĂȘtre de demande de certificat, nous pouvons enregistrer notre choix. AprĂšs cela, Ă  chaque connexion au portail, il suffira d'insĂ©rer le token et de saisir le code PIN de l'utilisateur, qui a Ă©tĂ© dĂ©fini lors du formatage. AprĂšs une telle authentification, le serveur sait dĂ©jĂ  quel utilisateur s'est connectĂ© et il n'est plus nĂ©cessaire d'ouvrir d'autres fenĂȘtres de vĂ©rification, permettant immĂ©diatement Ă  l'utilisateur d'accĂ©der Ă  son espace personnel.

Apache

Tout comme avec nginx, il ne devrait y avoir aucun problĂšme d'installation d'apache. Si vous ne savez pas comment installer ce serveur web, utilisez simplement la documentation officielle.

Nous allons maintenant procéder à la configuration de notre HTTPS et de l'authentification à deux facteurs :

  1. Pour commencer, il est nécessaire d'activer mod_ssl :
    $ a2enmod ssl
  2. Ensuite, activez les paramÚtres HTTPS du site par défaut :
    $ a2ensite default-ssl
  3. Nous allons maintenant éditer 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 correspondent presque exactement à ceux de nginx, donc je ne vais pas les expliquer. Pour ceux qui sont intéressés par les détails, bienvenue dans la documentation.
    Nous redémarrons maintenant notre serveur :

    $ service apache2 reload
    $ service apache2 restart

  4. Comme vous pouvez le voir, configurer l'authentification à deux facteurs sur n'importe quel serveur web, que ce soit sous Windows ou Linux, prend une heure au maximum. La configuration des navigateurs prend environ 5 minutes. Beaucoup pensent que la configuration et le travail avec l'authentification à deux facteurs sont difficiles et incompréhensibles. J'espÚre que notre article détruit au moins un peu ce mythe.

Seuls les utilisateurs enregistrés peuvent participer au sondage. Connectez-vous, s'il vous plaßt.

Avez-vous besoin d'instructions sur la configuration de TLS avec certificats selon GOST 34.10-2012 :

  • Oui, TLS-GOST est trĂšs nĂ©cessaire

  • Non, la configuration avec les algorithmes GOST n'est pas intĂ©ressante

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

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster