nginx basic auth 설정 구덩이 밟 기
basic auth 설정 예제:
location / {
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
설명:
구 덩이 를 밟 는 곳 이 바로 이 비밀번호 입 니 다. 공식 문서 에서 지원 하 는 비밀번호 유형 에 대해 설명 하 였 습 니 다.
htpasswd 나 openssl passwd 명령 으로 생 성 된 암 호 를 사용 하면 설정 이 유효 합 니 다. nginx 는 암호 보안 검 사 를 정상적으로 할 수 있 습 니 다. 암호 형식 이 지원 되 지 않 으 면 nginx 또는 오류 보고:
crypt_r() failed (22: Invalid argument)
그러나 업무 의 필요 로 인해 우 리 는 코드 로 nginx 의 설정 을 생 성하 고 모든 클 라 우 드 호스트 에 설정 한 다음 에 nginx 프로 세 스 를 끌 어 올 려 야 합 니 다.프로젝트 코드 는 go 언어 로 작성 되 기 때문에 대응 하 는 함수 나 라 이브 러 리 를 찾 아 nginx 가 지원 하 는 암 호 를 만들어 야 합 니 다.
go 언어 는 nginx 가 지원 하 는 암 호 를 생 성 합 니 다.
자동 생 성 암호 개발 을 진행 하기 전에 대략 세 가지 방안 이 실 현 될 수 있 을 것 이 라 고 생각 했다.
시스템 함수 crypt 직접 호출 ()
Linux 의 crypt 함 수 는 두 개의 인자 가 있 습 니 다. 함 수 는 다음 과 같이 정의 합 니 다.
char *crypt(const char *key, const char *salt);
그 중에서 매개 변수 key 는 암호 화 되 어야 하 는 내용 이 고 salt 매개 변 수 는 두 가지 유형 이 있 습 니 다.
ID | Method
─────────────────────────────────────────────
1 | MD5
2a | Blowfish (not in mainline glibc; added in some
| Linux distributions)
5 | SHA-256 (since glibc 2.7)
6 | SHA-512 (since glibc 2.7)
package crypt
/*
#define _GNU_SOURCE
#include
*/
import "C"
import (
"sync"
"unsafe"
)
var (
mu sync.Mutex
)
func Crypt(pass, salt string) (string, error) {
c_pass := C.CString(pass)
defer C.free(unsafe.Pointer(c_pass))
c_salt := C.CString(salt)
defer C.free(unsafe.Pointer(c_salt))
mu.Lock()
c_enc, err := C.crypt(c_pass, c_salt)
mu.Unlock()
if c_enc == nil {
return "", err
}
defer C.free(unsafe.Pointer(c_enc))
return C.GoString(c_enc), err
}
암호 생 성의 구체 적 인 실현:
func main() {
des, err := crypt.Crypt("Elastic123", "in")
if err != nil {
fmt.Errorf("error:", err)
return
}
sha512, err := crypt.Crypt("Elastic123", "$6$SomeSaltSomePepper$")
if err != nil {
fmt.Errorf("error:", err)
return
}
fmt.Println("des:", des)
fmt.Println("SHA512:", sha512)
}
실측 을 통 해 상기 crypt 함 수 를 호출 하여 nginx 가 지원 하 는 암호 화 암 호 를 생 성 할 수 있 습 니 다. 그러나 주의해 야 할 것 은 암호 길이 가 8 자리 가 넘 으 면 salt 인 자 는 $id $salt $encrypted 형식 만 선택 할 수 있 습 니 다. 테스트 과정 에서 이 구 덩이 를 밟 아서 nginx 는 암호 의 8 자리 만 검사 할 수 있 고 어 이 없 기 때 문 입 니 다.
go 코드 를 작성 하 는 과정 에서 C 함수 라 이브 러 리 를 호출 했 기 때문에 서버 가 처 한 환경 에 의존 해 야 하기 때문에 가장 좋 은 방법 은 go 표준 라 이브 러 리 의 함수 로 암 호 를 암호 화 하 는 것 입 니 다.
crypto 함수 라 이브 러 리 사용
go 의 crypto 표준 라 이브 러 리 는 많은 암호 화 알고리즘 을 봉 인 했 습 니 다. SHA 암호 화 알고리즘 을 사용 하여 암호 화 된 코드 는 다음 과 같 습 니 다.
package util
import (
"crypto/sha1"
"encoding/base64"
)
func GetSha(password string) string {
s := sha1.New()
s.Write([]byte(password))
passwordSum := []byte(s.Sum(nil))
return base64.StdEncoding.EncodeToString(passwordSum)
}
테스트 과정 에서 GetSha () 함 수 를 호출 하여 암호 화 된 문자열 을 만 들 었 습 니 다. 그러나 nginx 의 conf / htpasswd 파일 에 직접 설정 되 어 있 습 니 다. reload nginx 설정 후 암호 가 유효 하 는 지 테스트 한 결과 오류 가 발생 했 습 니 다. 앞에서 말 한 바 와 같이 SHA 암호 화 된 암 호 는 '{SHA}' 접두사 가 있어 야 합 니 다. 설정 을 다시 수정 한 후 검증 을 거 쳐 야 합 니 다.코드 로 nginx 가 지원 하 는 암호 화 문자열 을 성공 적 으로 만 들 었 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SSM 프레임 워 크 의 pom. xml 템 플 릿텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.