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

Ă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 (), 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
- Installation :
$ apt-get install xca - Et lançons-le :
$ xca - 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.
- 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.
- Attribuons un nom Ă la nouvelle paire de clĂ©s. Je l'ai appelĂ©e â ClĂ© CA.
- Ă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.
- Assurez-vous de choisir SHA-256, car l'utilisation de SHA-1 ne peut plus ĂȘtre considĂ©rĂ©e comme sĂ©curisĂ©e.
- 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é.
- Dans l'onglet Objet choisissons notre paire de clés. Vous pouvez également remplir tous les champs principaux du certificat ici.

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

Créons les clés et le certificat pour l'utilisateur
- 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 â . Nous avons Ă©galement des compilations pour arm64, armv7el, armv7hf, e2k, mipso32el, que l'on peut obtenir dans notre SDK â . En plus des compilations pour Linux, il existe Ă©galement des compilations pour macOS, FreeBSD et Android.
- Ajoutons un nouveau fournisseur PKCS#11 dans XCA. Pour cela, allez dans le menu Options vers l'onglet Fournisseur PKCS#11.
- Cliquez sur Ajouter et choisissez le chemin vers la bibliothĂšque PKCS#11. Dans mon cas, c'est usrliblibrtpkcs11ecp.so.
- Nous aurons besoin d'un token formatĂ© Rutoken ECP PKI. TĂ©lĂ©chargez l'utilitaire rtAdmin â
- Nous exécutons
$ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u - Comme type de clĂ©, choisissez â clĂ© RSA-2048 sur Rutoken ECP PKI. J'ai appelĂ© cette clĂ© ClĂ© client.

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

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

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 -
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 .
- Lançons Firefox.
- Essayons d'abord de nous connecter sans jeton. Nous obtenons cette image :

- AccĂ©dez Ă about:preferences#privacy, et allez dans PĂ©riphĂ©riques de sĂ©curitĂ©âŠ
- Cliquez sur Charge, pour ajouter un nouveau pilote de périphérique PKCS#11 et indiquer le chemin vers notre librtpkcs11ecp.so.
- 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.
- Maintenant, connectons-nous avec le jeton. Firefox propose de choisir le certificat qui sera sélectionné sur le serveur. Sélectionnons notre certificat.

- PROFIT!

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 :
- Pour commencer, il est nécessaire d'activer mod_ssl :
$ a2enmod ssl - Ensuite, activez les paramÚtres HTTPS du site par défaut :
$ a2ensite default-ssl - 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 10Comme 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
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. , 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





