Generador de htpasswd
Escribe un nombre de usuario y una contraseña y copia una línea lista para un archivo .htpasswd, el archivo de contraseñas que usan Apache y Nginx para la autenticación HTTP básica. El hash se calcula en tu navegador con una sal aleatoria nueva, así que la contraseña no sale de tu dispositivo.
Funciona en tu navegador: nada de lo que escribes se envía a ningún sitio.
Cómo se usa
- Escribe el nombre de usuario y la contraseña.
- Deja bcrypt salvo que tu servidor sea antiguo y elige el coste.
- Copia la línea y añádela a tu archivo .htpasswd. Para varios usuarios, genera una línea por usuario.
Cómo funciona
- bcrypt ejecuta la función bcrypt, basada en Blowfish, 2^coste veces con una sal aleatoria de 16 bytes y escribe
$2y$ más el coste, la sal y el hash. Se ejecuta en un worker en segundo plano para que la página siga respondiendo.
- APR1-MD5 es la variante de Apache del algoritmo md5crypt: 1000 rondas de MD5 sobre la contraseña y una sal de 8 caracteres, escritas como
$apr1$salt$hash.
- SHA-1 es
{SHA} seguido del SHA-1 de la contraseña en Base64, sin sal.
Ejemplo
Para el usuario admin, bcrypt con coste 10 da una línea como admin:$2y$10$ seguida de 53 caracteres de sal y hash. APR1 da admin:$apr1$ seguido de la sal, un $ y 22 caracteres. El SHA-1 de la contraseña password es siempre admin:{SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g=.
Consejos
- Guarda el archivo fuera de la raíz de documentos, o bloquea el acceso a él, para que nadie pueda descargar los hashes.
- Al servidor no le importa el nombre del archivo, solo la ruta de la configuración.
- Para quitar un usuario, borra su línea.
Preguntas frecuentes
¿Qué hash elijo?
bcrypt. Es lento a propósito y lleva sal, lo que encarece adivinar contraseñas a partir de un archivo robado. Apache lo admite desde la versión 2.4, y Nginx lo acepta donde la función crypt() del sistema admite bcrypt, que es lo habitual en las distribuciones Linux actuales. Usa APR1-MD5 para instalaciones antiguas y SHA-1 solo como último recurso.
¿Cómo uso la línea?
Añádela a un archivo .htpasswd, un usuario por línea, fuera de la carpeta pública de la web. En Apache apunta AuthUserFile al archivo junto con AuthType Basic y Require valid-user; en Nginx usa auth_basic y auth_basic_user_file. Sirve el sitio por HTTPS, ya que la autenticación básica envía la contraseña en cada petición.
¿Por qué el hash cambia cada vez?
bcrypt y APR1 mezclan una sal aleatoria en el hash, y la sal se guarda en la propia línea. El servidor la lee al comprobar una contraseña, así que todas las versiones de la línea valen para la misma contraseña.
¿Qué coste uso para bcrypt?
Cada paso más duplica el trabajo. El comando htpasswd usa 5 por defecto; esta herramienta empieza en 10, que sigue siendo rápido para un inicio de sesión. Los valores muy altos ralentizan cada petición que comprueba la contraseña, porque la autenticación básica se comprueba en cada petición.
¿Es lo mismo que ejecutar htpasswd?
Las líneas tienen los mismos formatos que htpasswd -B (bcrypt con el prefijo $2y$), htpasswd -m (APR1, $apr1$) y htpasswd -s ({SHA}), así que el servidor las lee igual.