Générateur htpasswd

Saisissez un nom d’utilisateur et un mot de passe, ou générez-en un. Vous obtenez la ligne d’un fichier .htpasswd, hachée dans votre navigateur, et les quelques lignes de configuration Apache ou Nginx qui placent le mot de passe devant un dossier.

Un mot de passe aléatoire est créé dans votre navigateur ; saisissez le vôtre pour le remplacer. Il est haché ici et jamais envoyé ailleurs.
Hachage
Serveur web
Votre ligne .htpasswd Ajoutez-la comme une ligne à /etc/nginx/.htpasswd. Une ligne par utilisateur.

Saisissez ou générez un mot de passe

Ajoutez ceci dans le bloc server de votre site

nginx.conf
location /admin/ {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

Faire tourner votre propre Apache ou Nginx demande un serveur que vous contrôlez. À partir de 3,02 € par mois aujourd’hui, parmi 2 226 serveurs.

Fonctionne dans votre navigateur : rien de ce que vous saisissez n’est envoyé ailleurs.

Comment la ligne est créée

Un fichier .htpasswd contient un utilisateur par ligne : le nom, deux-points et un hachage du mot de passe. Le serveur web hache ce que saisit un visiteur avec le même sel et compare le résultat, si bien que le mot de passe lui-même n’est jamais conservé.

ligne = utilisateur:$apr1$sel$hachage
sel = 8 caractères aléatoires parmi ./0-9A-Za-z
hachage = MD5 du mot de passe et du sel, répété 1 000 fois

APR1 est le schéma d’Apache fondé sur MD5, celui qu’écrit htpasswd -m et que lisent Apache et Nginx sur tous les systèmes. La page le calcule dans votre navigateur avec un sel aléatoire : le même mot de passe donne donc une ligne différente à chaque fois, et les deux sont valides. bcrypt (htpasswd -B) est plus lent à deviner, mais ne peut pas être calculé dans un navigateur sans une grosse bibliothèque : lancez pour cela la commande indiquée ci-dessus sur le serveur.

Exemple

L’utilisateur admin avec le mot de passe hunter2 et le sel ./AZaz09 donne admin:$apr1$./AZaz09$8b6dJ.Cy04zF2N.GdzCEo1, la même ligne qu’affiche openssl passwd -apr1 -salt ./AZaz09 hunter2.

Questions

Où placer le fichier .htpasswd ?

En dehors des dossiers que sert votre site, pour que personne ne puisse le télécharger : /etc/nginx/.htpasswd ou /etc/apache2/.htpasswd sont courants. Rendez-le lisible uniquement par le serveur web, par exemple avec root comme propriétaire, le groupe www-data et le mode 640.

Faut-il utiliser bcrypt ou APR1 ?

bcrypt est plus solide face à quelqu’un qui vole le fichier, et Apache 2.4 le lit ; Nginx le lit quand la bibliothèque crypt du système le prend en charge, comme sur la plupart des distributions Linux actuelles. APR1 fonctionne partout. Avec un long mot de passe aléatoire, les deux conviennent, car c’est le mot de passe, et non le hachage, qui empêche de deviner.

L’authentification basique nécessite-t-elle HTTPS ?

Oui. Le navigateur envoie le nom d’utilisateur et le mot de passe à chaque requête, seulement encodés en base64, pas chiffrés. Sans HTTPS, n’importe qui sur le chemin réseau peut les lire. Un certificat Let’s Encrypt gratuit suffit.

Nginx prend-il en charge les fichiers .htpasswd ?

Oui, avec auth_basic et auth_basic_user_file dans un bloc server ou location, comme montré ci-dessus. Nginx ne lit pas les fichiers .htaccess : la configuration va donc dans celle du site, suivie de nginx -t et d’un rechargement.