Dans l'
un de nos articles précédents, nous avons parlé de l'importance de l'authentification à deux facteurs sur les portails d'entreprise de l'entreprise. La dernière fois, nous avons montré comment configurer l'authentification sécurisée dans le serveur Web IIS.
Dans les commentaires, on nous a 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. Ce n'est certainement pas une distribution de serveur, mais il n'y a pratiquement aucune différence pour Debian. Pour les autres distributions, les chemins d'accès aux bibliothèques / configurations peuvent légèrement varier.
- Jeton. Nous continuons à utiliser le modèle PKI Rutoken EDS , qui est idéalement adapté aux performances à haute vitesse pour les applications d'entreprise.
- Pour travailler avec le token sous Linux, vous devez installer les packages suivants:
libccid libpcsclite1 pcscd pcsc-tools opensc
Rédaction de certificats
Dans les articles précédents, nous nous sommes appuyés sur le fait que les certificats de serveur et de client seront émis à l'aide de Microsoft CA. Mais comme nous configurons tout sous Linux, nous parlerons en même temps d'une autre façon d'émettre ces certificats - sans quitter Linux.
Nous utiliserons XCA en tant qu'autorité de certification (
https://hohnstaedt.de/xca/ ), qui est disponible dans toute distribution Linux moderne. Toutes les actions que nous effectuerons dans XCA peuvent également être effectuées en mode ligne de commande en utilisant les utilitaires OpenSSL et pkcs11-tool, mais pour des raisons de simplicité et de clarté, nous ne les donnerons pas dans cet article.
Pour commencer
- Installer:
$ apt-get install xca
- Et lancez:
$ 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 racine, qui sont utilisées pour signer tous les autres certificats.
Créer des clés et un certificat d'autorité de certification racine
L'infrastructure à clé publique (PKI) est basée sur un système hiérarchique. L'autorité de certification racine ou l'autorité de certification racine est au cœur de ce système. Son certificat doit d'abord être créé.
- Nous créons la clé privée RSA-2048 pour CA. Pour ce faire, sous l'onglet Clés privées , cliquez sur 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 écrivons le certificat CA lui-même, en utilisant la paire de clés créée. Pour ce faire, accédez à 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ûre.
- En tant que modèle, assurez-vous de sélectionner [par défaut] CA. N'oubliez pas de cliquer sur Appliquer tout , sinon le modèle ne s'applique pas.
- Dans l'onglet Objet , sélectionnez notre paire de clés. Vous pouvez y remplir tous les champs principaux du certificat.
Créer des clés et un certificat de serveur https
- De même, nous créons la clé privée RSA-2048 pour le serveur, je l'ai appelée - Clé de serveur.
- Lors de la création du certificat, nous sélectionnons que le certificat de serveur doit être signé sur le certificat CA.
- N'oubliez pas de choisir SHA-256 .
- En tant que modèle, sélectionnez [par défaut] HTTPS_server . Cliquez sur Appliquer tout .
- Ensuite, dans l'onglet Objet , sélectionnez notre clé et remplissez les champs obligatoires.

Nous créons des clés et le certificat pour l'utilisateur
- La clé privée de l'utilisateur sera stockée sur notre token. Pour l'utiliser, vous devez installer la bibliothèque PKCS # 11 à partir de notre site. 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 versions pour arm64, armv7el, armv7hf, e2k, mipso32el, qui peuvent être prises dans notre SDK - https://www.rutoken.ru/developers/sdk/ . En plus des assemblys pour linux, il existe également des assemblys pour macOS, freebsd et android.
- Ajoutez le nouveau fournisseur PKCS # 11 au XCA. Pour ce faire, accédez au menu Options de l'onglet Fournisseur PKCS # 11 .
- Cliquez sur Ajouter et sélectionnez le chemin d'accès à la bibliothèque PKCS # 11. Dans mon cas, c'est \ usr \ lib \ librtpkcs11ecp.so.
- Nous avons besoin d'un jeton formaté Rutoken EDS PKI. Téléchargez l'utilitaire rtAdmin - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
- Nous réalisons
$ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN- >
- Comme type de clé, nous sélectionnons - la clé RSA-2048 sur le PKI Rutoken EDS. J'ai nommé cette clé Client Key.
- Saisissez le code PIN. Et nous attendons l'achèvement de la génération matérielle de la paire de clés
- Nous créons le certificat pour l'utilisateur par analogie avec le certificat du serveur. Cette fois, sélectionnez le modèle HTTPS_client [par défaut] et n'oubliez pas de cliquer sur Appliquer tout .
- Dans l'onglet Objet , entrez les informations utilisateur. Nous répondons par l'affirmative à la demande de sauvegarde du certificat pour le jeton.
Par conséquent, sous l'onglet
Certificats dans XCA, vous devriez obtenir quelque chose comme ça.
Cet ensemble minimal de clés et de certificats suffit pour commencer à configurer directement les serveurs.
Pour configurer, nous devons exporter le certificat CA, le certificat de serveur et la clé privée du serveur.
Pour ce faire, sélectionnez l'entrée souhaitée dans l'onglet approprié du XCA et cliquez sur
Exporter .
Nginx
Comment installer et exécuter un serveur nginx, je n’écrirai pas - il y a suffisamment d’articles sur Internet à ce sujet, sans parler de la documentation officielle. Passons à la configuration de HTTPS et de l'authentification par jeton à deux facteurs.
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 ssl dans nginx peut être trouvée ici -
https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificateJe ne décrirai que brièvement celles que j'ai moi-même posées:
- ssl_verify_client - Indique que la chaîne d'approbation de certificat doit être vérifiée.
- ssl_verify_depth - Détermine la profondeur de la recherche de certificat racine de confiance dans la chaîne. Étant donné que 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, etc.
- ssl_client_certificate - Spécifie le chemin d'accès au certificat racine approuvé, qui est utilisé pour vérifier la confiance dans le certificat utilisateur.
- ssl_certificate / ssl_certificate_key - indique le chemin d'accès au 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, et que tous les fichiers sont là où c'est nécessaire et ainsi de suite.
Et en fait tout! Comme vous pouvez le voir, la configuration est très simple.
Vérification du travail dans Firefox
Puisque nous faisons tout complètement sous Linux, nous supposerons que nos utilisateurs travaillent également sous Linux (s'ils ont Windows, alors
consultez les instructions pour configurer les navigateurs dans l'article précédent .
- Nous démarrons Firefox.
- Essayons de nous connecter sans jeton au début. Nous obtenons l'image suivante:
- Accédez à propos de: préférences # confidentialité et accédez à Dispositifs de sécurité ...
- Cliquez sur Charger pour ajouter le nouveau pilote de périphérique PKCS # 11 et spécifiez le chemin d'accès à notre librtpkcs11ecp.so.
- Pour vérifier que le certificat est visible, vous pouvez accéder au Gestionnaire de certificats . Vous êtes invité à saisir un code PIN. Après l'entrée correcte, vous pouvez vérifier que sur l'onglet Vos certificats, notre certificat avec un jeton est apparu.
- Maintenant, nous allons avec le jeton. Firefox suggère de choisir un certificat qui sera sélectionné sur le serveur. Choisissez notre certificat.
- PROFIT!
La configuration est effectuée une seule fois, et comme vous pouvez le voir dans la fenêtre de demande de certificat, nous pouvons enregistrer notre choix. Après cela, chaque fois que vous entrez dans le portail, nous n'avons qu'à insérer un jeton et entrer 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 vous ne pouvez plus créer de fenêtres supplémentaires pour la vérification, mais laissez immédiatement l'utilisateur dans son compte personnel.
Apache
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 à configurer notre HTTPS et l'authentification à deux facteurs:
- Vous devez d'abord activer mod_ssl:
$ a2enmod ssl
- Et puis activez les paramètres de site HTTPS par défaut:
$ a2ensite default-ssl
- Modifiez maintenant 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 presque avec les noms des paramètres dans nginx, donc je ne les expliquerai pas. Encore une fois, toute personne intéressée par les détails - bienvenue dans la documentation.
Redémarrez maintenant notre serveur:
$ service apache2 reload $ service apache2 restart
Comme vous pouvez le voir, configurez l'authentification à deux facteurs sur n'importe quel serveur Web, que sur Windows, que sur Linux, cela prend au maximum une heure. Et la configuration des navigateurs prend environ 5 minutes. Beaucoup de gens pensent que la configuration et l'utilisation de l'authentification à deux facteurs sont difficiles et incompréhensibles. J'espère que notre article au moins un peu, mais démystifier ce mythe.