GrepBoardTools GrepBoard 매뉴얼 ↗ Log ↗

Tools / 서버 설정

htpasswd · bcrypt 만들기

사용자 이름과 비밀번호를 넣고 형식을 고르면 .htpasswd 에 넣을 사용자:해시 한 줄이 나옵니다.

입력한 값은 브라우저 안에서만 계산하고 서버로 보내지 않습니다.

🔒 비밀번호는 이 브라우저 밖으로 나가지 않습니다 — 해시는 여기서 계산합니다.

1 올릴 때마다 계산이 두 배. 10 은 여기서 1초도 안 걸리고, 서버도 로그인마다 같은 일을 합니다.

무엇을 하나

nginx 의 auth_basic_user_file 과 Apache 의 AuthUserFile 이 읽는 .htpasswd 파일에 넣을 사용자:해시 한 줄을 만듭니다. 해시는 이 브라우저 안에서 계산하고, 비밀번호는 어디로도 보내지 않습니다. 「줄 확인」 탭에서는 이미 있는 줄이 어떤 비밀번호와 맞는지 볼 수 있습니다.

예시

형식줄의 꼴서버에서 같은 명령
bcrypt (cost 10)admin:$2y$10$ + 53자htpasswd -B -C 10 파일 admin
APR1-MD5admin:$apr1$ + 소금 8자 + $ + 22자htpasswd -m 파일 admin (기본값)
SHA-1admin:{SHA} + Base64 28자htpasswd -s 파일 admin

bcrypt 와 APR1 은 줄마다 무작위 소금이 들어가서 같은 비밀번호도 매번 다른 줄이 나옵니다. {SHA} 는 소금이 없어 늘 같은 줄이고, 그래서 쓰지 않는 편이 낫습니다.

흔한 실수

  • 있는 파일에 htpasswd -c — -c 는 파일을 새로 만들면서 있던 사용자를 모두 지웁니다. 두 번째 사용자부터는 -c 없이 씁니다.
  • 같은 사용자를 두 줄 — nginx 와 Apache 모두 위에서부터 읽어 처음 맞는 이름의 줄만 봅니다. 비밀번호를 바꾸려면 옛 줄을 지웁니다.
  • 72 바이트가 넘는 bcrypt 비밀번호 — 앞 72 바이트만 쓰입니다. 한글은 한 글자에 3 바이트라 24자면 이미 72 바이트입니다.
  • 웹 루트 안에 둔 .htpasswd — nginx 는 점으로 시작하는 파일도 그대로 내보냅니다. /etc/nginx/ 처럼 웹 루트 밖에 둡니다.
  • HTTP 로만 쓰기 — 기본 인증은 사용자 이름과 비밀번호를 Base64 로만 감싸 보냅니다. HTTPS 와 함께 씁니다.

어떻게 확인했나

Ubuntu 24.04 의 Apache htpasswd 2.4.58 을 설치하지 않고 풀어서 썼습니다. 도구가 만든 줄 70개(형식 셋 · 한글 · 이모지 · 특수 문자 · 빈 비밀번호 · 71/72/73 바이트 · 255 바이트)를 htpasswd -v 가 맞다고 하는지, 첫 글자를 바꾼 비밀번호는 거절하는지 봤고, 73 바이트 이상인 bcrypt 는 앞 72 바이트만으로도 맞는지 확인했습니다. 거꾸로 htpasswd -nbB · -nbm · -nbs 가 만든 줄을 이 도구가 맞다고 하는지도 봤습니다. bcrypt 는 Python bcrypt 와 시스템 libcrypt 의 crypt()(nginx 가 bcrypt 줄을 확인할 때 쓰는 함수)로 한 번 더 확인했고, nginx 설정 예는 nginx -t 를 통과했습니다 — 모두 334번. bcrypt 계산은 bcryptjs 3.0.3(BSD-3-Clause)을 고치지 않고 묶어 씁니다.

자주 묻는 것

bcrypt · APR1-MD5 · SHA-1 중 무엇을 고르나요?

bcrypt 를 고릅니다. 일부러 느리게 만든 방식이라 파일이 새어 나가도 비밀번호를 하나씩 맞춰 보기가 어렵습니다. APR1-MD5 는 htpasswd 의 기본값이라 오래된 서버에서도 읽히지만 계산이 빠릅니다. {SHA} 는 소금이 없는 SHA-1 이라 피합니다.

nginx 도 bcrypt 줄을 읽나요?

이 도구의 세 형식 가운데 $apr1$ · {SHA} 는 nginx 가 직접 계산하고, $2y$ bcrypt 는 시스템의 crypt() 에 넘깁니다. Ubuntu 24.04 의 libcrypt 는 $2y$ 를 읽습니다(이 도구의 줄로 확인함). 다른 배포판에서 nginx 가 bcrypt 줄을 못 읽으면 APR1-MD5 로 만듭니다.

비밀번호가 서버로 가나요?

아니요. 해시는 이 브라우저 안에서 계산하고, 비밀번호와 결과는 서버로 보내지 않으며 방문 통계 · 광고에도 넘기지 않습니다. 자세한 것은 개인정보 처리 안내에 있습니다.